프로그래머스 Level 2의 전화번호 목록을 풀었다. Hash를 이용하라는데, 아무리봐도 안될 것 같아 그냥 이중 for문으로 작성했다.
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
Arrays.sort(phone_book);
for(int i=0; i<phone_book.length; i++){
for(int j=i + 1; j<phone_book.length; j++){
if (phone_book[j].indexOf(phone_book[i]) == 0){
return false;
}
else{
break;
}
}
}
return true;
}
}
Arrays.sort 를 한 이유는 String을 정렬하면 사전순으로 정렬되기 때문이다. 생각해보니 for문 한 번으로도 될 것 같다. 위와 같이 풀었을 때의 테스트 결과이다.
다른 사람들의 풀이를 보니까 나처럼 푼 사람도 있었고 문제에서 얘기한 HashMap을 사용한 사람도 있었다. 아래는 HashMap을 사용한 사람의 코드이다.
public boolean solution(String[] phone_book) {
boolean answer = true;
HashMap<String,Integer> h =new HashMap<>();
for(String s : phone_book) {
h.put(s, h.getOrDefault(s,0)+1);
}
for(String s : phone_book) {
for(int j=1; j<s.length(); j++) {
if(h.containsKey(s.substring(0,j))) {
answer = false;
break;
}
}
}
return answer;
}
phone_book 배열에서 문자열을 가져와 하나씩 잘라가면서 HashMap에 잘라진 문자열이 키로 존재하는지 확인하고 있다면 false를 반환하는 코드이다. 아래는 위 코드로 실행했을 때의 테스트 결과이다.
확실히 글자수가 적거나 개수가 적을 경우에는 HashMap을 이용하면 상당히 빠른 것 같다. 그런데 굳이 HashMap을 사용할 필요가 있을까 싶은 문제였다..
'0x20. 알고리즘 > 0x22. 프로그래머스' 카테고리의 다른 글
[Level 2] 조이스틱 (0) | 2021.10.05 |
---|---|
[Level 2] 124 나라의 숫자 (0) | 2021.09.16 |
[Level 2] 멀쩡한 사각형 (0) | 2021.09.15 |
[Level 2] 단체사진 찍기 (Java) (0) | 2021.09.08 |
프로그래머스 Level 1 문제풀이 리스트 (0) | 2021.09.06 |