🔍 문제
✏️ 풀이 - Java
어떤 값 a를 어떤 값 b가 포함하고 있다면 이를 일관성이 없다고 할 수 있다.
예를 들어서,
911
93123857
91158634
가 있으면 911을 91158634에 포함돼어있어 일관성이 없다고 할 수 있다 이를 이용해서 문제를 풀었다.
값을 String 배열로 받아준 다음에 Arrays.sort를 이용해서 오름차순으로 정렬해준다. 만약 정렬된 입력값 배열에서 다음의 값과 길이가 같으면 완전히 다른 값이기 때문에 건너뛰어준다.(애초에 문제에서 모든 값은 다 다른 값이라고 알려줌) 그리고나서 현재 값의 길이가 다음 값의 길이보다 작은 경우 다음 값이 현재 값을 가지고 있는지 idexOf를 사용해 확인해 준다. indexOf의 결과로 -1이 아닌 다른 값이 나온다면 일관성이 없는 값을 가지고 있는 것이므로 break해주고 NO를 출력하면된다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int t = Integer.parseInt(br.readLine());
String[] result = new String[t];
for(int i = 0; i < t; i++) {
int N = Integer.parseInt(br.readLine());
String[] phoneNum = new String[N];
boolean flag = true;
for(int k = 0; k < N; k++) {
phoneNum[k] = br.readLine();
}
Arrays.sort(phoneNum);
for(int j = 0; j < N-1; j++) {
if(phoneNum[j].length() == phoneNum[j+1].length()) continue; //길이가 같으면 어차피 겹치지 않음
if(phoneNum[j].length() < phoneNum[j+1].length()) {
if(phoneNum[j+1].indexOf(phoneNum[j]) != -1) {
flag = false;
break;
}
}
}
result[i] = flag? "YES\n" : "NO\n";
}
for(String s : result) {
bw.write(s);
}
bw.flush();
bw.close();
br.close();
}
}
'Algorithm > 문제풀이' 카테고리의 다른 글
백준 온라인 저지 - 1152번: 단어의 개수 (0) | 2019.09.06 |
---|---|
백준 온라인 저지 - 11725번: 트리의 부모 찾기 (0) | 2019.09.05 |
백준 온라인 저지 - 2468번: 안전영역 (0) | 2019.08.28 |
백준 온라인 저지 - 1012번: 유기농 배추 (0) | 2019.08.26 |
백준 온라인 저지 - 2667번: 단지번호붙이기 (0) | 2019.08.26 |