Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Comparator
- 컴퓨터구조
- 백준
- 프로그래머스
- 오블완
- 구현
- 티스토리챌린지
- 기능 개발
- 다단계 칫솔 판매
- swea
- 괄호 회전하기
- 베스트 앨범
- Comparable
- 데이터
- 토마토
- java
- 운영 체제
- 순열
- sw expert academy
- 도둑질
- 메뉴 리뉴얼
- 자바
- 고정소수점
- 조합
- 표 편집
- 컴퓨터 구조
- 코테
- Call-by-Value
- 부동소수점
- 요세푸스
Archives
- Today
- Total
감자는 아직 꿈을 꾼다.
[백준-java] 9996번 실버 3 한국이 그리울 땐 서버에 접속하지 본문
String 문제
자바의 String 메소드를 활용해서 풀 수 있는 문제
3가지 방식으로 풀이를 설명한다
문제 설명
https://www.acmicpc.net/problem/9996
내 풀이
주어진 패턴을 * 를 기준으로 split하여 앞부분과 뒷부분을 나누고
substring을 활용해서 주어진 문자열과 같은지 확인한다.
주의할 점은 주어진 문자열이 first와 second의 합보다 작은 것에 예외처리
또한 split할 때 그냥 * 로 하면 아래와 같은 에러가 뜨게된다.
**Dangling meta character ' * ' near index 0
+, * , ^ 로 나누고자 할 때도 발생하는 오류로
**앞에 \ 기호 두개를 붙여야 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb =new StringBuilder();
int N = Integer.parseInt(br.readLine());
String pattern = br.readLine();
String[] given = pattern.split("\\*");
String first = given[0];
String second = given[1];
for (int i = 0 ; i< N ; i++) {
String pb = br.readLine();
if ( pb.length() >= first.length() + second.length() &&
first.equals(pb.substring(0,first.length()))&&
second.equals(pb.substring(pb.length()-second.length(),pb.length())) ) {
sb.append("DA\n");
}else sb.append("NE\n");
}
System.out.println(sb);
}
}
startsWith && endsWith를 활용한 풀이
이게 더 가독성이 좋고 자바의 stirng 메소를 잘 활용한 것 같다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb =new StringBuilder();
int N = Integer.parseInt(br.readLine());
String pattern = br.readLine();
String[] given = pattern.split("\\*");
String first = given[0];
String second = given[1];
for (int i = 0 ; i< N ; i++) {
String pb = br.readLine();
if ( pb.length() >= first.length() + second.length() &&
pb.startsWith(first) && pb.endsWith(second)) {
sb.append("DA\n");
}else sb.append("NE\n");
}
System.out.println(sb);
}
}
정규 표현식풀이
.* 를 활용한 풀이로
a*b는 a가 0번이상 반복후 b한번
a.*b가 우리가 원하는 형태이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
// 입력: 첫 줄에는 N과 패턴
int N = Integer.parseInt(br.readLine());
String[] inputs = br.readLine().split("\\*");
// 정규표현식 변환: "*"을 ".*"로 변경
Pattern pattern = Pattern.compile(inputs[0]+".*"+inputs[1]);
for (int i = 0; i < N; i++) {
String testString = br.readLine();
Matcher mac = pattern.matcher(testString);
if (mac.matches()) {
sb.append("DA\n"); // 패턴 매칭 성공
} else {
sb.append("NE\n"); // 패턴 매칭 실패
}
}
System.out.print(sb); // 결과 출력
}
}
'코테적 감자 > 백준' 카테고리의 다른 글
[백준-java] 토마토 7576번 7569번 (0) | 2024.11.19 |
---|---|
[백준-java] 3613번 실버 3 java vs c++ (0) | 2024.11.17 |
[SWEA-java] 미생물 격리 (2) | 2024.11.15 |
[백준-java] 골드 4 타임머신 (2) | 2024.11.09 |
[백준-java] 골드 4 최단 경로 (2) | 2024.11.07 |