티스토리 뷰

문제 설명

  • 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
  • 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.
    • 구조대 : 119
    • 박준영 : 97 674 223
    • 지영석 : 11 9552 4421
  • 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.

제한 사항

  • phone_book의 길이는 1 이상 1,000,000 이하입니다.
  • 각 전화번호의 길이는 1 이상 20 이하입니다.

입출력 예

입출력 예 설명

 

예제 #1

  • 앞에서 설명한 예와 같습니다.

예제 #2

  • 한 번호가 다른 번호의 접두사인 경우가 없으므로, 답은 true입니다.

 

예제 #3

  • 첫 번째 전화번호, “12”가 두 번째 전화번호 “123”의 접두사입니다. 따라서 답은 false입니다.

 


문제 풀이

나의 풀이

public boolean solution(String[] phone_book) {
    Map<String, String> map = new HashMap<>();
    for (String s : phone_book) {
      map.put(s, s);
    }

    for (String s : phone_book) {
      if(map.keySet().stream().anyMatch(e -> !e.equals(s) && e.startsWith(s))) {
        return false;
      }
    }
    return true;
  }

이상적인 답안

public boolean solution(String[] phoneBook) {
       for(int i=0; i<phoneBook.length-1; i++) {
            for(int j=i+1; j<phoneBook.length; j++) {
                if(phoneBook[i].startsWith(phoneBook[j])) {return false;}
                if(phoneBook[j].startsWith(phoneBook[i])) {return false;}
            }
        }
        return true;
}
  • 그리 이상적으로 보이진 않지만 다른 답안들 전부 Hash를 쓰지 않고 loop를 도는 식으로 구현을 했다.
  • 그 중에 가장 심플한 코드로 가져와봤다. 

참고

 

코딩테스트 연습 - 전화번호 목록 | 프로그래머스

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 r

programmers.co.kr


끝으로

이 글이 도움이 되었다면, 하단의 Google 광고 👎👎👎 한번씩 클릭 부탁 드립니다. 🙏🙏🙏

광고 클릭은 많은 힘이 됩니다!

반응형
댓글