-
[백준]5052: 전화번호 목록 - JAVA문제풀이/백준 2021. 2. 20. 17:18
[백준]5052: 전화번호 목록
풀이
이 문제는 문자열 관련한 새로운 지식을 많이 쌓을 수 있었던 문제였다.
우선, 숫자를 String으로 입력받고 Arrays.sort()를 사용해 정렬을 하면 기존의 숫자 정렬과는 결과가 다르다.
기존의 숫자 정렬은 1, 9, 10, 44, 34, 4로 입력되었을때 정렬 결과가 1, 4, 9, 10, 34, 44가 된다.
그러나 이를 String으로 입력하고 정렬하면 결과가 1, 10, 34, 4, 44이 된다. 그 이유는 프로그램은 숫자가 아닌 문자로 인식해서 오름차순 정렬을 하기 때문이다. ( ex) 다 가나 다라 나 가 -> 가 가나 나 다 다라 순서로 정렬되듯이.)
이해가 잘 되는 예시는 다음과 같다.
입력) 911 91155 993 91222 99333
String 오름차순 정렬 후) 911 91155 91222 993 99333
이러한 경우에서 문자 오름차순 특징을 사용하여 바로 이전의 숫자가 다음 숫자의 시작부분과 일치하는지 체크하면 접두어인지 아닌지 알 수 있다.
이때 startsWith()함수를 사용하여 문자열 a가 문자열 b의 접두어인지 확인할 수 있다.
코드
123456789101112131415161718192021222324252627282930import java.util.*;public class Main {public static void main(String[] args) throws Exception {Scanner scan = new Scanner(System.in);int t = scan.nextInt();for(int i = 0; i < t; i++) {int n = scan.nextInt();scan.nextLine();String[] nums = new String[n];for(int j = 0; j < n; j++) {nums[j] = scan.nextLine();}Arrays.sort(nums);boolean isInclude = true;for(int j = 1; j < n; j++) {if(nums[j].startsWith(nums[j - 1])) {isInclude = false;break;}}if(isInclude == false) System.out.println("NO");else System.out.println("YES");}}}cs '문제풀이 > 백준' 카테고리의 다른 글
[백준]14502: 연구소 - JAVA (0) 2021.02.21 [백준]1937: 욕심쟁이 판다 -JAVA (0) 2021.02.21 [백준]1520: 내리막 길 - JAVA (0) 2021.02.19 [백준]2170: 선 긋기 - JAVA (0) 2021.02.18 [백준]2341: DDR - JAVA (0) 2021.02.18