문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/42577
Note
배열, 반복문으로도 가능할 것 같았지만 해시 문제라 해시를 사용(여전히 hash 문제 도전중)
처음엔 map의 key를 들고 phone_book 배열 인자들이 key를 포함하고 있는지 비교하며 순회했으나
실행결과는 넘어가는데 효율성 테스트가 전부 시간 초과. 마지막 테스트 시간만 봐도 어마어마하다.
배열 loop를 하나라도 줄이기 위해서 substring과 key를 비교하는 방법으로 코드를 바꿨다.
Key
1. map.containsKey()
2.substring(int beginIndex, int endIndex)
beginIndex랑 endIndex가 매번 헷갈리는데, beginIndex에는 말그대로 시작할 인덱스를 넣어주면 되고 endIndex에는 beginIndex + 몇글자 짜리 substring을 만들건지 더해서 넣으면 된다. 예로 인덱스 3부터 11자리 짜리 substring만들려면 substring(3, 14)
로 넣으면 된다.
Returns a string that is a substring of this string. The substring begins at the specified beginIndex and extends to the character at index endIndex - 1. Thus the length of the substring is endIndex-beginIndex.
https://docs.oracle.com/javase/8/docs/api/index.html
제출한 코드
import java.util.*;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
//phone_book의 인자를 모두 key로, value는 true 저장 //key만 저장하면됨.
//key가 phone_book의 전화번호의 substring을 포함하는지 확인.
//포함한다면 false 리턴
Map<String, Boolean> keyNum = new HashMap<>(); //phone_book의 key를 담을 map
for(String key : phone_book){
keyNum.put(key, true);
}
for(String phoneNum : phone_book){
for(int i = 0; i < phoneNum.length(); i++){
if(keyNum.containsKey(phoneNum.substring(0, i))){ //keyNum의 key에 phoneNum의 substring 포함 여부 체크
answer = false;
break;
}
}
}
return answer;
}
}
'코딩테스트 > Java' 카테고리의 다른 글
프로그래머스/자바 lv.2 최솟값 만들기 - Arrays.sort(arr) (0) | 2024.04.02 |
---|---|
프로그래머스/자바 lv1 완주하지 못한 선수 - HashMap, getOrDefault(), keySet(), for-each (0) | 2024.03.31 |
프로그래머스/자바 lv.1 가장 가까운 같은 글자 - HashMap, 문자열을 배열로 변환하기 (0) | 2024.03.30 |