[프로그래머스/42577] 전화번호 목록
in Study / Coding Test
☑️ 문제
☑️ 풀이
실패한 풀이
phone_book
을 오름차순 정렬 후, 첫 번째 전화번호의 길이를 구한다.
substring()
메서드를 써서 해당 원소의 길이만큼 다음 원소를 자른다.
HashSet
에 자른 원소를 먼저 추가 후 첫 번째 전화번호를 추가해서 size의 변화가 있다면 false를 리턴하고, 없다면 다음 순서로 넘어가도록 했다.- 이 방법으로 하니 일부는 통과되지만, 런타임에러가 발생한다.
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
Arrays.sort(phone_book);
Set<Integer> set = new HashSet<>();
for (int i = 0; i < phone_book.length; i++) {
int num = Integer.parseInt(phone_book[i]);
for (int j = i + 1; j < phone_book.length; j++) {
set.add(Integer.parseInt(phone_book[j].substring(0, phone_book[i].length())));
int size = set.size();
set.add(num);
if (size != set.size() - 1) {
return false;
} else {
set.remove(num);
}
}
set.clear();
}
return true;
}
}
성공한 풀이
HashSet
에 모든 번호를 다 넣었다.- 반복문을 통해
phone_book
의 번호를 순차적으로 꺼내, 해당 번호를substring()
으로 잘라가면서HashSet
에 있는 번호와 일치하는 게 있는지 확인한다.
//시간: 10.61ms
//메모리: 91.7MB
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
Set<String> set = new HashSet<>();
for (int i = 0; i < phone_book.length; i++) {
set.add(phone_book[i]);
}
for (String str : phone_book) {
for (int j = 1; j <= str.length(); j++) {
if (set.contains(str.substring(0, j))
&& !str.equals(str.substring(0, j))) {
return false;
}
}
}
return true;
}
}