https://school.programmers.co.kr/learn/courses/30/lessons/42577
전화번호 목록 문제가 '해시' 문제로 분류 되어 있지만 풀 수 있는 방식이 다양하다.
1. sort 정렬방식
2. hash 방식
더 간편하고 쉬운것은 sort 지만 왠지 정석대로 hash로도 풀고 싶었다...
🌘 문제 이해하기
- 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인
- 접두어란 단어앞에 붙은 글자의 조합
🌗문제 자세히보기
① sort 방식
- String 문자열을 정렬하면 9 , 12 , 1 가 1 , 12 , 9 실제로 숫자의 크기가 아니라 한글자 씩 숫자들의 순서대로 정렬이된다.
- phone_book 을 정렬하고 앞뒤로 비교한다. 뒤에 문자열이 앞에 문자열로(접두어) 시작하는지 확인한다.
② hash 방식
- HashMap에 전화번호를 key 값으로 저장한다. (value 는 의미 없음)
- map에 저장되어 있는 한 번호를 한글자씩 추가해서 접두어를 만든다.
- 해당 접두어가 map에 포함되어있는 key 인지 확인한다.
🌕 최종코드
public boolean solution(String[] phone_book) {
boolean answer = true;
Arrays.sort(phone_book);
for(int i=0;i<phone_book.length-1;i++) //기준값
{
if(phone_book[i+1].startsWith(phone_book[i]))
{
return false;
}
}
return answer;
}
public boolean solution2(String[] phone_book) {
HashMap<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++)
{
String phone = phone_book[i];
for(int j=0;j<phone.length();j++)
{
if(map.containsKey(phone.substring(0,j)))
{
return false;
}
}
}
return true;
}
'항해' 카테고리의 다른 글
[DAY36] JAVA 프로그래머스 N으로 표현 (0) | 2024.12.16 |
---|---|
[Day35]JAVA 백준 주사위 윷놀이(17825번) (0) | 2024.12.02 |
[Day34]JAVA 프로그래머스 개인정보 수집 유효기간 (1) | 2024.12.01 |
[Day33]JAVA 프로그래머스 신규 아이디 추천 (1) | 2024.11.29 |
[Day32]JAVA 백준 가장 긴 바이토닉 부분 수열(11054번) (0) | 2024.11.28 |