programmers lv1 완주하지 못한 선수(고득점 kit)


전화번호 목록
처음 시도했던 접근법은,
HashMap<Integer, ArrayList> hm 을 선언해서 전화번호의 길이를 key로 하는 String을 ArrayList로 저장했다. 이렇게 하고 새로운 for문에서 20글자짜리 String이 있으면 19,18,17...1일 때 까지 잘라보는 작업을 했다. 효율성 테스트 마지막 테케에서 계속 걸렸다.


스터디원들과 리뷰를 진행하고 나서, 다시 고친 코드.
길이 20짜리 전화번호를 HashSet에 19,18,17…1까지 모두 저장한다.
그리고 나서 다시 찾아보면 된다..

import java.util.*;

class Solution {
    public boolean solution(String[] phone_book) {
        HashSet<String> hs = new HashSet<>(); //접두어를 모두 저장 1,12까지만 4,45, 7,78

        HashMap<Integer, String> hm = new HashMap<>();
        //접두어에 모두 넣기
        for (String str : phone_book) {
            for (int i = str.length()-1; i >= 1; i--)
                hs.add(str.substring(0, str.length() - i)); //12345 5 , 1 12 123 1234
        }

        //접두어에 들어가는지 봄
        for(String str : phone_book){
            if(hs.contains(str))
                return false;
        }
        return true;
    }
}





© 2020.08. by ritajeong

Powered by ritajeong