Coding Test
21. Programmers Level 2. '전화번호 목록'
Daen12
2023. 7. 12. 09:10
https://school.programmers.co.kr/learn/courses/30/lessons/42577
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
원래 for문으로 완전탐색으로 진행했지만 시간초과가 났다. 따라서 해시로 다시 접근했던 문제
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
Map<String, Integer> hash = new HashMap<>();
for(int i=0; i<phone_book.length; i++){
hash.put(phone_book[i], new Integer(0));
}
for(int i=0; i<phone_book.length; i++){
for(int j=1; j<phone_book[i].length(); j++){
if(hash.containsKey(phone_book[i].substring(0,j))) answer = false;
}
}
return answer;
}
}
containskey를 이용해 차례로 문자열을 앞에서부터 잘라서 해시값과 일치하는 값이 있는지 확인하는 과정을 거쳤다.
얼핏 보기에는 하나씩 검사해야 하기에 시간이 오래 걸릴 것 같지만, 해시의 시간복잡도가 워낙 작아서 통과 가능한 것 같다!