문제
https://school.programmers.co.kr/learn/courses/30/lessons/42577
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드
1. HashSet 이용하여 풀기
HashSet에 전화번호들을 모두 다 저장한다.
그리고 각 전화번호에 대해 처음부터 substring 한 값이 set에 있으면 접두어이므로 false를 리턴한다
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
HashSet<String> hash = new HashSet<>();
for(int i=0;i<phone_book.length;i++){
hash.add(phone_book[i]);
}
for(String str : phone_book){
for(int i=1;i<str.length();i++){
if(hash.contains(str.substring(0,i)))
return false;
}
}
return true;
}
}
2. sort와 loop 이용하기
문자열 배열은 정렬하면 기본 사전순으로 정렬된다. 즉, 숫자순으로 먼저 정렬이 되고 그 다음에는 길이 순대로 정렬읻 된다.
따라서, 접두어가 되는 부분은 접두어를 포함하고 있는 문자열의 앞에 올 것이다.
이를 이용하여 for문 1번만 이용하여 startsWith와 함께 문자열을 포함하는지 판단할 수 있다.
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
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 true;
}
}