알고리즘/문제풀기
[프로그래머스] 전화번호 목록 - 해시
hyun_jo_o
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을 해준 것 같습니다.