코드굽는 타자기

Programmers[42577] - 전화번호 목록도움말[Level2] 본문

알고리즘/해시

Programmers[42577] - 전화번호 목록도움말[Level2]

bright-jun 2020. 4. 30. 02:34

링크

 

프로그래머스

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

programmers.co.kr

 

문제설명

  • 접두사 포함관계 여부 파악

문제풀이

  • 비교대상 min길이 이용해서 비교

문제코드

import java.util.HashSet;



public class Solution{

    public static boolean solution(String[] phone_book) {
        HashSet<String> hs = new HashSet<String>();

        for (String phone: phone_book) {
            boolean contains=false;
            for (String pnum: hs) {
                int min = Math.min(pnum.length(), phone.length());
                String pnum_s = pnum.substring(0, min);
                String phone_s = phone.substring(0, min);
                if(pnum_s.equals(phone_s)) {
                    contains = true;
                    break;
                }
            }

            if(!contains) {
                hs.add(phone);
            }
            else {
                return false;
            }
        }

        return true;
    }

    public static void main(String[] args) {
        System.out.println(solution(new String[] {"119", "97674223", "1195524421"}));
        System.out.println(solution(new String[] {"123", "45674223", "7895524421"}));
        System.out.println(solution(new String[] {"12", "12374223", "1235524421"}));
    }
}

아쉬운점

  • phone 객체 만들어서 equals 오버라이딩해서 contains 검사 해보려 했는데 구현이 안된다...
  • 굳이 HashSet 써야하나 싶긴함
    • 다른 사람들 풀이 보면 HashSet안쓰고 효율적으로 풀었음

다른사람들 풀이

  • 정렬 후 O(N)으로 비교
  • String.startsWith(str) 메소드로 접두사 비교함
Comments