2 분 소요

2. 전화번호 목록

  • 전화 번호를 담은 배열 phone_book이 solution 함수의 매개 변수로 주어질 때,
  • 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false 그렇지 않으면 true를 리턴

입출력

  • 입력 : 전화 번호를 담은 배열 phone_book
  • 출력 : 접두어인 경우가 있으면 false 그렇지 않으면 true

제한 사항

  • phone_book의 길이는 1이상 1,000,000 이하입니다.
    • 각 전화번호의 길이는 1 이상 20 이하 입니다.
    • 같은 전화번호가 중복 해서 들어있지 않습니다.

Brute force

public boolean solution(String[] phone_book) {

      for (int i = 0; i < phone_book.length; i++) {
          for (int j = 0; j < phone_book.length; j++) {
              if (i == j) continue;
              String shorter = phone_book[i].length() <= phone_book[j].length() ? phone_book[i] : phone_book[j];
              String longer = phone_book[i].length() > phone_book[j].length() ? phone_book[i] : phone_book[j];
              if (longer.startsWith(shorter)) {
                  return false;
              }
          }
      }

      return true;
  }

실행 결과

정확성  테스트
테스트 1 	통과 (0.02ms, 77.2MB)
테스트 2 	통과 (0.04ms, 70MB)
테스트 3 	통과 (0.02ms, 74.8MB)
테스트 4 	통과 (0.02ms, 70.2MB)
테스트 5 	통과 (0.03ms, 75.4MB)
테스트 6 	통과 (0.02ms, 79.4MB)
테스트 7 	통과 (0.02ms, 66.3MB)
테스트 8 	통과 (0.02ms, 76.7MB)
테스트 9 	통과 (0.02ms, 72.8MB)
테스트 10 	통과 (0.01ms, 75.5MB)
테스트 11 	통과 (0.02ms, 82.4MB)
테스트 12 	통과 (0.02ms, 74.3MB)
테스트 13 	통과 (0.02ms, 72.2MB)
테스트 14 	통과 (24.44ms, 79.6MB)
테스트 15 	통과 (22.02ms, 87.1MB)
테스트 16 	통과 (28.23ms, 85.8MB)
테스트 17 	통과 (58.80ms, 82MB)
테스트 18 	통과 (80.43ms, 84.2MB)
테스트 19 	통과 (38.43ms, 89.8MB)
테스트 20 	통과 (108.51ms, 79.8MB)
효율성  테스트
테스트 1 	통과 (0.03ms, 55.3MB)
테스트 2 	통과 (0.03ms, 55.5MB)
테스트 3 	실패 (시간 초과)
테스트 4 	실패 (시간 초과)

해시이용

["12","123","1235","567","88"]
-> 제일 작은 길이로 전부 substring
["12", "12", "12", "56", "88"]
 -> Hash
["12", "56", "88"]
-> 원본 length = hashSet 같으면? true, false

["12","345","3456","567","88"]
-> ["12","34","34","56","88"] ==> 안나옴
-> ["345","345","567","88"]

["12","345","3456","567","88"]
1. sort
["12","88","345","567","3456"]
2. 길이별 hash
작은 길이 기준으로 모두 비교?
[ 
  [ X  , {"12"} ],
  [ X  , {"88"} ],
  [ X, {"34"}, {"345"} ],
  [ X, {"56"}, {"567"} ],
  [ X, {"34"}, {"345"}, {"3456"} ],
3. 
12, 88 없음
다음 길이 3기준
345 

3. 위장

스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return

입출력

  • 입력 : [의상의 이름, 의상의 종류] 의 배열
  • 출력 : 서로 다른 옷의 조합의 수

제한사항

  • clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다.
  • 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다.
  • 같은 이름을 가진 의상은 존재하지 않습니다.
  • clothes의 모든 원소는 문자열로 이루어져 있습니다.
  • 모든 문자열의 길이는 1 이상 20 이하인 자연수이고 알파벳 소문자 또는 ‘_’ 로만 이루어져 있습니다.
  • 스파이는 하루에 최소 한 개의 의상은 입습니다.