Live Today

[프로그래머스] 전화번호 목록 (Java) 본문

알고리즘/프로그래머스 문제풀이

[프로그래머스] 전화번호 목록 (Java)

ilivetoday 2023. 2. 26. 15:53
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/42577?language=java 

 

프로그래머스

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

programmers.co.kr

 

💡2가지 방법의 문제풀이 !

✔️ Arrays.sort() 후 for문을 돌며 다음 문자열이 이전 문자열을 접두어로 포함하는지 체크하는 방법

✔️ 이 문제의 유형인 Hash 자료구조를 사용해 푸는 방법

 

🔹 1번째 방법 

  • Arrays.sort() 를 사용해 문자열 배열 정렬
  • startsWith() 를 사용해 해당 문자열이 이전 문자열을 접두어로 갖는지 확인
import java.util.*;
import java.io.*;

class Solution {
    public boolean solution(String[] phone_book) {
        boolean answer = true;
        
        // 우선 정렬을 먼저 한다.
        Arrays.sort(phone_book);
        
        // 바로 다음 문자열이 이전 문자열을 접두어로 갖는지 확인
        for(int i=0;i<phone_book.length-1;i++) {
            if(phone_book[i+1].startsWith(phone_book[i]))
                return false;
        }
        
        return answer;
    }
}

 

🔹 2번째 방법 

  • Hash 자료구조를 활용한 문제풀이
  • containsKey() 를 사용해 해당 문자열이 HashMap 안에 key로 존재하는지 확인
  • substring() 을 사용해 문자열을 자른다.
import java.util.*;
import java.io.*;

class Solution {
    public boolean solution(String[] phone_book) {
        
        // 1. HashMap 선언
        Map<String, Integer> map = new HashMap<>();
        
        // 전화번호 목록 map에 넣기
        for(int i=0;i<phone_book.length;i++) {
            map.put(phone_book[i], i);
        }
        
        // 각 전화번호의 substring이 HashMap에서 key로 존재하는지 확인
        for(int i=0;i<phone_book.length;i++) {
            for(int j=0;j<phone_book[i].length();j++) {
                if(map.containsKey(phone_book[i].substring(0,j)))
                    return false;
            }
        }
        
        return true;
    }
}

 

 


🌐 참고 링크

https://coding-grandpa.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%A0%84%ED%99%94%EB%B2%88%ED%98%B8-%EB%AA%A9%EB%A1%9D-%ED%95%B4%EC%8B%9C-Lv-2-%EC%9E%90%EB%B0%94-Java