728x90
예외적인 부분이 많았던 것 같다.
왜 정답률이 낮지? 했는데 막상 풀어보니 예제에 없는 예시를 꼭 생각해봐야했던 문제였다.
예제에 없는 예시는 질문검색에서 참고해서 대입했다.
// 예외처리 ( str의 길이가 s 보다 크면 NE 출력 후 break
if ( str.length() -1 > s.length()) {
System.out.println("NE");
break;
}
예외처리한 부분
// * 앞쪽 비교
for (int j = 0; j < idx; j++) {
if (str.charAt(j) != s.charAt(j)) {
check = false;
}
}
앞쪽은 쉽게 비교할 수 있다. 0부터~ 시작한다.
// * 뒤쪽 비교
int back = ((str.length() - 1) - idx); // 1
ArrayList<Character> list1 = new ArrayList<>();
ArrayList<Character> list2 = new ArrayList<>();
for (int j = str.length() - 1; j > str.length() - back - 1; j--) {
list1.add(str.charAt(j));
}
for (int j = s.length() - 1; j > s.length() - back - 1; j--) {
list2.add(s.charAt(j));
}
if (!list1.equals(list2)) {
check = false;
}
뒤쪽을 비교해야하는데, 여기서 어떻게 구현해야하나 생각하다가 결국 List 를 2개만들어서 비교했다.
각각의 문자열이 길이가 다르기때문이다.
또한, * 에서부터 마지막 값까지 몇개의 문자가 있는지 구하기 위해 back 이라는 변수를 만들었다.
if (check == false) {
System.out.println("NE");
} else {
System.out.println("DA");
}
check = true;
break;
마지막으로, check 가 false 일때 true 일때를 구분해서 출력한 후, check 를 입력받기 전에 초기화했기 때문에,
다시 true 로 초기화한 후 while 문을 빠져나가게 구현했다.
package BAEKJOON.Silver.Ⅲ;
import java.util.ArrayList;
import java.util.Scanner;
/**
* 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
* 1 초 128 MB 9525 2630 2064 27.396%
*/
public class NO9996 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String str = sc.next();
boolean check = true;
int idx = str.indexOf('*');
for (int i = 0; i < n; i++) {
String s = sc.next();
while (true) {
// 예외처리 ( str의 길이가 s 보다 크면 NE 출력 후 break
if ( str.length() -1 > s.length()) {
System.out.println("NE");
break;
}
// * 앞쪽 비교
for (int j = 0; j < idx; j++) {
if (str.charAt(j) != s.charAt(j)) {
check = false;
}
}
// * 뒤쪽 비교
int back = ((str.length() - 1) - idx); // 1
ArrayList<Character> list1 = new ArrayList<>();
ArrayList<Character> list2 = new ArrayList<>();
for (int j = str.length() - 1; j > str.length() - back - 1; j--) {
list1.add(str.charAt(j));
}
for (int j = s.length() - 1; j > s.length() - back - 1; j--) {
list2.add(s.charAt(j));
}
if (!list1.equals(list2)) {
check = false;
}
if (check == false) {
System.out.println("NE");
} else {
System.out.println("DA");
}
check = true;
break;
}
}
}
}
728x90
'Algorithm & SQL > BAEKJOON' 카테고리의 다른 글
백준 JAVA 1620 나는야 포켓몬 마스터 이다솜 (0) | 2022.09.01 |
---|---|
백준 JAVA 2559 수열 (0) | 2022.09.01 |
백준 JAVA 11655 ROT13 (0) | 2022.08.31 |
백준 JAVA 1159 농구 경기 (0) | 2022.08.30 |
백준 JAVA 10988 팰린드롬인지 확인하기 (0) | 2022.08.29 |
댓글