-
[프로그래머스] 전화번호 목록 - 해시알고리즘/문제풀기 2019. 4. 16. 18:34
◆ 나의 풀이
compareTo 라는 문자열을 비교해 주는 함수를 만들어서 각 배열의 문자열들을 비교해 주도록 만들었다.
while문 안에서 while(i<numbers.length() && k<compares.length()) 이렇게 되는 이유는 더 작은 길이까지만 비교해 주어도 괜찮기 때문이다.
아래의 주석 처럼 동작하면 테스트 통과가 된다!
class Solution { private static boolean compareTo(String numbers, String compares) { int i=0; int k=0; while (i<numbers.length() && k<compares.length()) { // 두 문자열보다 길이가 짧을 때까지 if(numbers.charAt(i) != compares.charAt(k)) return false; // 문자열이 다르면 false를 반환 i++; k++; } return true; // 문자열이 같으면 true를 반환 } public boolean solution(String[] phone_book) { int pblength = phone_book.length; for(int i=0; i<pblength; i++) { for(int j=i+1; j<pblength; j++) { // 이미 비교해 준 앞의 배열은 넣어줄 필요가 없어서 j=i+1로 시작해줌 String phone = phone_book[i]; String compare = phone_book[j]; if(compareTo(phone, compare)) // compareTo의 반환값이 true이면 return false; // false를 반환 } } return true; // compareTo의 반환값이 false이면 true를 반환 } }
◆ 모든 풀이
더욱 간단한 코드가 있었는데 아래의 코드이다.
class Solution { public boolean solution(String[] phoneBook) { for(int i=0; i<phoneBook.length-1; i++) { for(int j=i+1; j<phoneBook.length; j++) { if(phoneBook[i].startsWith(phoneBook[j])) {return false;} //phoneBook[i]이 phoneBook[j]로 시작 하면 false를 반환 if(phoneBook[j].startsWith(phoneBook[i])) {return false;} //phoneBook[j]가 phoneBook[i]로 시작 하면 false를 반환 } } return true; } }
나는 startsWith라는 함수를 알지 못해서 사용하지 못했다.
▽startsWith()
startsWith() 메소드는 문자열이 주어진 접두 표현을 가지고 시작하는지 확인 하는 함수입니다.
만약 주어진 접두표현을 가지고 시작한다면 true를 반환하고, 아니라면 false를 반환합니다.
하지만 위 문제에서는 같은 문자열이 있으면 false반환하라고 해서 if문으로 걸고 return을 해준 것 같습니다.
'알고리즘 > 문제풀기' 카테고리의 다른 글
[프로그래머스] 타겟넘버 - DFS (0) 2019.05.21 [프로그래머스] 가장 큰 수 - 정렬 (0) 2019.05.01 [프로그래머스] K번째 수 - 정렬 (0) 2019.04.20 [프로그래머스] 위장 - 해시 (0) 2019.04.17 [프로그래머스] 완주하지 못한 선수 - 해시 (0) 2019.04.16 댓글