문제
풀이방법
- 배열
- 이중포문을 돌며 String class의 함수인 startsWith을 사용하여 true 반환 시 false 리턴
- 해시맵(HashMap)
- substring 함수를 통해 0부터 각 전화번호의 모든 숫자까지 돌며 해시맵에 포함되는지 확인하여 해당 시 false 리턴
- 같은 전화번호가 중복되지 않기 때문에 각 전화번호를 확인 할 필요 없음( substring 마지막 문자 전까지)
- value 값은 쓰이지 않으므로 HashSet으로 사용 가능
- 해시셋(HashSet)
- 해시맵과 동일
코드
👇🏻 HashMap
package hashmap_pro;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class Solution3 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] arr = br.readLine().split(" ");
Solution3 s = new Solution3();
System.out.println(s.solution(arr));
System.out.println(s.solution2(arr));
System.out.println(s.solution3(arr));
}
public boolean solution(String[] phone_book){
Map<String,Integer> map = new HashMap<>();
int value=0;
for(String str : phone_book){
map.put(str,value);
value++;
}
for(int i=0; i<phone_book.length; i++){
for(int j=1; j<phone_book[i].length(); j++){
if(map.containsKey(phone_book[i].substring(0,j))){
return false;
}
}
}
return true;
}
}
👇🏻 배열
public boolean solution2(String[] phone_book){
for(int i=0; i< phone_book.length-1; i++){
for(int j=i+1; j<phone_book.length; j++){
if(phone_book[i].startsWith(phone_book[j])){
return false;
}else if(phone_book[j].startsWith(phone_book[i])){
return false;
}
}
}
return true;
}
👇🏻 HashSet
public boolean solution3(String[] phone_book){
Set<String> set = new HashSet<>();
for( String str : phone_book){
set.add(str);
}
for( String str : phone_book){
for(int i=1; i<str.length(); i++) {
if (set.contains(str.substring(0,i))) {
return false;
}
}
}
return true;
}
'코딩테스트' 카테고리의 다른 글
[백준 / 실버5] 1251 : 단어 나누기 (JAVA) (0) | 2023.03.17 |
---|---|
[백준 / 브론즈1] 1236 : 성 지키기 (JAVA) (0) | 2023.03.17 |
[프로그래머스 / lv 1] 완주하지 못한 선수 (JAVA_해시) (0) | 2023.03.16 |
[프로그래머스 / lv 1] 폰켓몬 (JAVA_해시) (0) | 2023.03.12 |
[백준 / 실버 4] 1940 : 주몽 (JAVA) (0) | 2023.03.11 |