프로그래머스 코딩테스트 level2에 해당하는 hash문제이다.
나는 hash문제라고 떡하니 적혀있어서 hash로 풀려고 노력했다.
다른사람들의 답안을 보니 그냥 순수배열로 푼 사람들이 많았다. 내가 생각하지 못한 함수들을 많이들 쓴 것 같았다.
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
HashMap<String,Integer> hash=new HashMap<String,Integer>();
for(int i=0;i<phone_book.length;i++){
hash.put(phone_book[i],phone_book[i].length());
}
for(int i=0;i<hash.size()-1;i++){
for(int j=i+1;j<hash.size();j++){
String min=phone_book[i];
String max=phone_book[j];
if(hash.get(min)>hash.get(max)){
min=phone_book[j];
max=phone_book[i];
}
if(min.equals(max.substring(0,hash.get(min)))){
answer=false;
break;
}
}
if(answer==false)
break;
}
return answer;
}
}
hash를 써서 배열만을 쓴 답보다 길이가 길다.
hah의 key는 전화번호를 넣고 value에는 그 전화번호의 길이를 담았다.
어느 번호의 접두어가 되려면 그 번호보다는 길이가 짧아야한다.
또한 접두어임을 알고 그 접두어의 길이를 안다면 비교하고자 하는 번호를 접두어의 길이만큼 잘라서 비교하면 될 것이라고 생각했다.
hash문제를 풀때는 어떤 값을 key,value로 설정할 것인지 잘 고민해보고 시작하는게 중요한 것 같다.
또한 내가 원하는 답을 풀었다면 for문을 꼭 break시키자!!(처음에 이걸 안해서 효율성 테스트에 실패했다)
'Computer Engineering > 알고리즘 테스트' 카테고리의 다른 글
프로그래머스 코딩테스트 문제: 쇠 막대기 (0) | 2020.03.11 |
---|---|
프로그래머스 코딩테스트 문제: 문자열 내 마음대로 정렬하기 (0) | 2020.03.10 |
프로그래머스 코딩테스트 문제: 정수 내림차순으로 배치하기 (0) | 2020.03.07 |
프로그래머스 코딩테스트 문제: 스파이 (0) | 2020.03.06 |
프로그래머스 코딩테스트 문제: K번째수 (0) | 2020.03.06 |