알고리즘 저장소
Programmers Level 2 : 전화번호 목록 (Java)
Diger
2022. 6. 11. 17:43
728x90
문제 설명
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.
제한 사항 phone_book의 길이는 1 이상 1,000,000 이하입니다. 각 전화번호의 길이는 1 이상 20 이하입니다. 같은 전화번호가 중복해서 들어있지 않습니다.
입출력 예제 phone_book return ["119", "97674223", "1195524421"] false ["123","456","789"] true ["12","123","1235","567","88"] false
입출력 예 설명 입출력 예 #1 앞에서 설명한 예와 같습니다.
입출력 예 #2 한 번호가 다른 번호의 접두사인 경우가 없으므로, 답은 true입니다.
입출력 예 #3 첫 번째 전화번호, “12”가 두 번째 전화번호 “123”의 접두사입니다. 따라서 답은 false입니다.
package PhoneNumberList;
import java.util.HashMap;
class Solution {
public boolean solution(String[] phone_book) {
HashMap<String, String> hashPhone = new HashMap<>();
// 해시맵에 phone_book 원소를 하나씩 담는다. 이 때 value 값은 아무거나 넣어도 상관없다.
for (String item : phone_book) {
hashPhone.put(item, "test");
}
// phone_book 원소를 하나씩 순회한다.
for (String item : phone_book) {
// phone_book 의 원소의 문자열 길이만큼 반복한다.
for (int i = 0; i < item.length(); i++) {
// 해시맵에 들어있는 Key값과 문자열 최대길이까지 반복자를 하나씩 늘려가면서 원소를 substring 한 문자열과 비교한다.
// 이때 Key 값과 문자열을 자른 것과 같은 것이 있으면
// false, 즉 접두사 전화번호가 존재하는 것이다.
// ex)
// item = "119"
// hashPhone = {"119", "test"}
// if -> hashPhone 에 null이라는 key를 가진게 있나 ?
// if -> hashPhone 에 1이라는 key를 가진게 있나??
// if -> hashPhone 에 11 이라는 Key를 가진게 있나?
-> 조건문 false
// item = "1195524421"
// hashPhone = {"119" = "test", "1195524421" = "test}
// if -> hashPhone 에 1이라는 key를 가진게 있나 ?
// if -> hashPhone 에 11이라는 key를 가진게 있나??
// if -> hashPhone 에 119 이라는 Key를 가진게 있나?
-> 조건문 true
if (hashPhone.containsKey(item.substring(0, i))) {
return false;
}
}
}
return true;
}
}
public class Main {
public static void main(String[] args) {
String [] phone_book = {"119", "97674223", "1195524421"};
// String [] phone_book = {"123","456","789"};
// String [] phone_book = {"12","123","1235","567","88"};
Solution s = new Solution();
System.out.println(s.solution(phone_book));
}
}
728x90