문제
https://programmers.co.kr/learn/courses/30/lessons/42577
코딩테스트 연습 - 전화번호 목록
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조
programmers.co.kr
풀이코드
public boolean solution(String[] phone_book) { //전화번호 목록 문제
String clone;
Map<String, Integer> phones = new HashMap<>();
for (int i = 0; i < phone_book.length; i++) { //전화번호들을 HashMap형태로 대입
phones.put(phone_book[i], i);
}
for (int i = 0; i < phone_book.length; i++) {
clone = phone_book[i]; //전화번호 1개를 clone에 넣음
for (int j = 1; j < clone.length(); j++) { //그 전화번호의 처음부터 끝까지 잘랐을때
if(phones.containsKey(clone.substring(0,j))){ //그 전화번호의 접두에 다른 전화번호가 있을 경우
return false; //false반환
}
}
}
return true; //걸리는 것이 없으면 true반환
}
이 문제는 생각보다 간단한데 우선 전화번호들을 HashMap형태로 저장을 하는데 Key값이 중요하고 value값은 딱히 상관이 없어서 마음대로 저장을 하면 된다.
그리고 굳이 HashMap형태로 저장을 안하고 ArrayList의 형태로 저장을 해도 상관이 없지만 문제가 Hash문제라서 HashMap을 사용해서 풀어보았다.
HashMap형태로 저장을 했으면 phone_book에 있는 전화번호 중에 1개를 뽑아서 clone에 넣는다.
Ex) clone = "1234"
그리고 그 clone을 substring을 이용해서 처음부터 조금씩 자르는데 그 자른 값이 다른 phone_book에 있으면 false를 반환한다.
예를 들어, 다른 phone_book에 "12"라는 값이 있으면 clone을 처음부터 조금씩 자를때 "12"라는 값이 나오므로 false가 반환이 되는데, 만약 phone_book에 "23"이라는 값만 있다고 치면 clone을 처음부터 자를때 절대 나올 수 없는 값이므로 true가 반환된다. 그래서 이런식으로 하나하나 다 검사를 하면 답이 나온다.
'프로그래머스 > Level 2' 카테고리의 다른 글
| [프로그래머스][Level2][Java] 구명보트 (0) | 2022.06.11 |
|---|---|
| [프로그래머스][Level2][Java] 예상대진표 (0) | 2022.06.11 |
| [프로그래머스][Level2][Java] 2xn 타일링 (0) | 2022.06.04 |
| [프로그래머스][Level2][Java] 모음사전 (0) | 2022.05.22 |
| [프로그래머스][Level2][Java] 괄호 변환 (0) | 2022.05.17 |