https://school.programmers.co.kr/learn/courses/30/lessons/42577
HashSet.contains(Object var1)
어떤 객체가 HashSet에 존재할 때 true, 없을 경우 false
HashMap.containsKey(Object key)
해당 키 값이 HashMap에 있을 경우 true, 없을 경우 false
파라미터로 입력받은 값과 같은 값이 있으면 true
HashMap.containsValue( )
해당 값이 HashMap에 있을 경우 true, 없을 경우 false
hashSet을 이용한 풀이
import java.util.HashSet;
import java.util.Arrays;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
HashSet<String> hash = new HashSet<>(Arrays.asList(phone_book));
for(int i=0; i<phone_book.length;i++) {
for(int j=1; j<phone_book[i].length();j++) {
if(hash.contains(phone_book[i].substring(0,j))) answer = false;
}
}
return answer;
}
}
- for문을 돌려서 HashSet에 넣는게 아니라 Arrays.asList를 사용해서 String 배열을 HashSet에 넣었다.
- 이중 for문 => 모든 전화번호의 substring이 HashSet에 존재하는지 확인
- int j=i+1;은 코드는 성공적으로 실행되지만 테스트케이스에서 오류가 난다...!
- int j=0보다는 int j=1가 for문 조금 덜 돈다!
hashMap을 이용한 풀이
import java.util.HashMap;
class Solution {
public boolean solution(String[] phone_book) {
HashMap<String, Integer> hash = new HashMap<>();
for(String phone : phone_book) {
hash.put(phone, 1);
}
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))) return false;
}
}
return true;
}
}
- containsKey()로 구분하기 때문에 value값은 필요없다..! HashSet과 동일한 로직
+ Arrays.sort( ) 와 Startswith( )를 활용한 풀이
import java.util.Arrays;
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;
}
}
- sort를 하지 않으면 안됨!
참고
'algorithm > Programmers' 카테고리의 다른 글
[JAVA] 기능 개발 (0) | 2023.03.30 |
---|---|
[JAVA] 같은 숫자는 싫어 (0) | 2023.03.29 |
[JAVA] 완주하지 못한 선수 (0) | 2023.03.28 |
[JAVA] 폰켓몬 (0) | 2023.03.28 |
[JAVA]숨어있는 숫자의 덧셈 (2) (0) | 2023.03.25 |