Woopii Vyeolog

[프로그래머스 코딩테스트 연습] 해시 2 본문

코딩테스트 연습

[프로그래머스 코딩테스트 연습] 해시 2

WooPii 2020. 4. 22. 20:58

문제 링크 : https://programmers.co.kr/learn/courses/30/parts/12077

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

2번 문제 : 전화번호 목록

 

문제 설명

 

내가 한 풀이

(subStirng()으로 잘라도 되지만 startWith()를 처음봐서 한번 써보았다.)

 

import java.util.*;

class Solution {
    public boolean solution(String[] phone_book) {
        boolean answer = true;
        
        //접두사를 보는것이라서 정렬을 해 놓으면 이중 for문을 쓸 필요가 없다.
        Arrays.sort(phone_book);
        
        //정렬을 해서 아래방향으로만 접두어가 있는지 검토한다. 위 방향으로는 접두어가 있을 수 없다.
        //자기 자신은 제외한다.
        for(int i = 0; i < phone_book.length-1;i++) {
            if(phone_book[i+1].startsWith(phone_book[i])) {
                answer = false;
                break;
            }
        }
        return answer;
    }
}

 

Hash를 사용한 풀이(이게 더 효과적인지는 모르겠음......)

 

import java.util.*;
class Solution {
    public boolean solution(String[] phone_book) {
        boolean answer = true;
        
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        
        //hash객체안에 Array안에 있는 데이터를 모두 쪼개어서 넣는다.
        //각 데이터마다 쪼개진 데이터를 넣고 자기 자신의 데이터는 안넣는다.
        //예 : '119' --> '1', '11' 이 들어간다. (포함관계에 넣지 않기 위함)
        for(int i = 0; i < phone_book.length; i++) {
            for(int j = 0; j < phone_book[i].length()-1; j++) {
                map.put(phone_book[i].substring(0, j+1), 0);
            }
        }
        
        //containsKey()메소드로 해당 String 값이 map에 있나 체크함 
        for(int i = 0; i < phone_book.length; i++) {
            if(map.containsKey(phone_book[i])) {
                answer = false;
                break;
            }
        }
        return answer;
    }
}
Comments