728x90
문제 출처 : 프로그래머스 코딩테스트 연습 고득점 kit 해시 2번
( https://programmers.co.kr/learn/courses/30/parts/12077 )
문제 설명
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 한다.
전화번호를 담은 배열을 solution 함수의 매개변수로 주어질 때,
어떤 번호가 다른 번호의 접두어인 경우 false를 그렇지 않다면 true를 return하도록 solution 함수 작성
제한 사항
- phone_book의 길이는 1 이상 1,000,000 이하입니다.
- 각 전화번호의 길이는 1 이상 20 이하입니다.
- 같은 전화번호가 중복해서 들어있지 않습니다.
문제 풀이 방법
- java.util의 HashMap과 Map을 가져와 해쉬맵을 정의해준다.
- 전화번호를 key, index값을 value로 전화번호의 갯수만큼 넣어준다.
- 접두어가 HashMap에 존재하는지 확인
substring으로 0부터 전체길이-1 까지 뗴어내서, 접두어의 존재 여부를 확인 - HashMap.containsKey(String)
String이란 Key가 현재 HashMap에 있는지 확인하는 함수
현재까지 HashMap에 등록된 key가 있는지 확인, 문제에서는 접두어가 있는지 확인 가능.
코드
import java.util.HashMap;
import java.util.Map;
class Solution {
public boolean solution(String[] phone_book) {
Map<String, Integer> map = new HashMap<>();
for(int i=0; i<phone_book.length; i++){
map.put(phone_book[i],i);
}
for(int i=0; i<phone_book.length; i++){
for(int j=0; j<phone_book[i].length(); j++){
if(map.containsKey(phone_book[i].substring(0,j))){
return false;
}
}
}
return true;
}
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
정렬 / 2 / 가장 큰 수 (JS) (0) | 2022.06.08 |
---|---|
정렬 / 1 / K번째 수 (JS) (0) | 2022.06.08 |
해시 / 3 / 베스트앨범 (JS) (0) | 2022.06.07 |
해시 / 2 / 위장 (JS) (0) | 2022.06.07 |
해시 / 1 / 완주하지 못한 선수 (JS) (0) | 2022.06.07 |