-
프로그래머스 > 해시 > 전화번호부기타/알고리즘 2021. 7. 22. 16:32
전화번호부 리스트에 있는 번호 중 다른 번호의 접두어가 되는 전화번호가 있는지 유무
처음에 번호의 길이를 짧은 순으로 정렬한 후 다른 긴 번호를 그 길이만큼 잘라서 검사하려고 했는데,
효율성 테스트를 계속 통과하지 못했다.
근데 코드를 이리저리 바꿔보면 코드 자체가 통과하지 못했다.
import java.util.Arrays; import java.util.Comparator; // 효율성 테스트 3,4 번 통과 못함 class Solution { public boolean solution(String[] phone_book) { Arrays.sort(phone_book,Comparator.comparing(String::length)); for(int i=0;i<phone_book.length-1;i++) { for(int j=i+1;j<phone_book.length;j++) { int len = phone_book[i].length(); if(phone_book[j].substring(0, len).equals(phone_book[i])) return false; } } } }
알고보니 처음에 Array.sort 의 기준을 문자열의 길이값으로 한 게 문제였다.
길이가 아닌 그냥 sort 를 하면 문자열의 아스키 값으로 정렬이 된다.
그럼 앞에 동일 문자로 시작하는 번호는 동일 아스키 값으로 변경된다.
class Solution { public boolean solution(String[] phone_book) { Arrays.sort(phone_book); //아스키값 기준으로 정렬 //String [] arr = {"1195524421","119", "97674223" }; // => {"119","1195524421", "97674223" };=> // 아스키 {"494957", "49495753535052525049","5755545552505051"} for(int i=0;i<phone_book.length-1;i++) { for(int j=i+1;j<phone_book.length;j++) { int len = phone_book[i].length(); if(phone_book[j].substring(0, len).equals(phone_book[i])) return false; } } } }
반응형'기타 > 알고리즘' 카테고리의 다른 글
프로그래머스 > 최고의 입찰가 (0) 2021.07.23 프로그래머스 > 행렬 (0) 2021.07.23 프로그래머스 > 해시 > 위장 (0) 2021.07.21 프로그래머스 > 해시 >베스트 앨범 (0) 2021.07.21 프로그래머스 스택과 큐 (0) 2021.07.16