-
프로그래머스 고득점 Kit) Hash, 전화번호 목록알고리즘/프로그래머스 고득점 Kit 2020. 7. 4. 00:55반응형
전화번호 목록
풀이
다른 사람 풀이를 구경하다가 좋은 메소드를 알게돼서 포스팅을 남긴다.
코득점 Kit의 Hash 문제라 처음에는 Hash를 이용해서 풀었었다.
오늘 다시 풀었을 때는 2중 포문과 substring을 이용해서 풀었다.
2중 포문으로 돌리는 법은 쉬운 방법이기 때문에 코드를 남기지는 않겠다.
다만, 코드 1에 남긴 코드가 너무 충격적이었다.
String에 startsWith라는 메소드가 있다는 것을 처음 알았다.
파라메터로 입력한 값으로 시작하는지 검증하는 메소드인데, 공백까지 맞는지를 검증한다.
startsWith와 유사한 endsWith라는 메소드도 존재한다.
이 메소드는 파라메터 값이 문자열 끝나는 부분과 같은지 검증한다.
덕분에 좋은 메소드를 하나 알아간다.
코드 1
class Solution { public boolean solution(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; if(phone_book[j].startsWith(phone_book[i])) return false; } } return true; } }
코드 2
class Solution { public boolean solution(String[] phone_book) { boolean answer = true; HashMap<Integer, ArrayList<String>> pbHash = new HashMap<>(); // 숫자의 길이별로 전화번호를 저장 //ArrayList는 전화번호의 길이가 같은 번호들의 집합 int min = 22; int max = 0; // Save Data for(int i=0; i<phone_book.length; i++) { String num = phone_book[i]; int numLen = num.length(); min = min > numLen ? numLen : min; // for문을 더 돌리기 위해 최소값과 max = max < numLen ? numLen : max; // 최대값 저장 if(pbHash.containsKey(numLen)) { // 이미 해당 길이의 전화번호가 있으면 ArrayList tmp = pbHash.get(numLen); tmp.add(num); pbHash.replace(numLen, tmp); // 추가해서 저장 } else { // 없는 길이의 전화번호면 ArrayList<String> tmp = new ArrayList<>(); tmp.add(num); pbHash.put(numLen, tmp); // 새롭게 선언하여 저장 } } // check for(int i=min; i <max; i++) { // 전화번호의 길이가 최소부터 최대-1 까지 돌면서 검사 if(pbHash.containsKey(i)) { // 해당 길이의 전화번호들이 있으면 ArrayList<String> originList = pbHash.get(i); for(int j=i+1; j<=max; j++) { // 길이가 하나 큰 것 부터 max까지 검증 if(pbHash.containsKey(j)) { // 전화번호를 뒤져서 존재하면 ArrayList<String> targetList = pbHash.get(j); for(String origin : originList) { int originLen = origin.length(); for(String target : targetList) { if(origin.equals( target.substring(0, originLen))) { return false; } } } } } } } return answer; } }
반응형'알고리즘 > 프로그래머스 고득점 Kit' 카테고리의 다른 글
프로그래머스 Lv.3) 섬 연결하기 (0) 2020.06.05 프로그래머스 Lv.3) 디스크 컨트롤러 (HEAP) (0) 2020.06.05 프로그래머스 Lv.3) 정수 삼각형 (DP) (0) 2020.06.04 프로그래머스 Lv.3) 등굣길 (DP) (0) 2020.06.04 프로그래머스 Lv.3) N으로 표현 (DP) (0) 2020.06.03