Backend
home
📱

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

생성일
2025/03/06 07:48
태그
Programmers
게시일
2025/03/06
최종 편집 일시
2025/03/06 08:03

문제

해결 방안 고민

== 전화번호 목록 == 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 함 구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성
Markdown
복사
문제 이해는 어렵지 않은데 접근법에 대해서 고민을 했던 문제였다.
substring을 활용하여 접두어를 찾아서 문제를 해결하는 방향으로 접근하려고 했지만 실패했다.
HashMap으로 풀이한 것 이외에 다른 방법으로도 접근해봤다.
startsWith을 활용하여 접두어만 추출해서 비교하는 방식으로 접근했으나 효율성 테스트에서 시간 초과가 발생하였다.
정렬을 활용하여 해결하려고 했으나 정확성 테스트에서 실패하였다(효율성 테스트는 성공).

해결 방법

substring과 HashMap을 활용해야 한다. 배열 요소들을 HashMap에 추가한 다음에 HashMap에 있는 키를 substring을 활용하여 포함 여부를 확인하는 방식으로 접근해야 한다.

코드

자료구조를 사용하지 않음 (실패)
public class Pro42577 { public boolean solution(String[] phone_book) { int length = phone_book[0].length(); int pLength = phone_book.length; for (int i = 1; i < pLength; i++) { if (phone_book[i].substring(0, length).equals(phone_book[0])) { return false; } } return true; } }
Java
복사
HashMap 활용
import java.util.HashMap; public class Pro42577 { public boolean solution(String[] phone_book) { int length = phone_book.length; HashMap<String, Integer> map = new HashMap<>(); for (int i = 0; i < length; i++) { map.put(phone_book[i], i); } for (String s : phone_book) { length = s.length(); for (int j = 0; j < length; j++) { if (map.containsKey(s.substring(0, j))) { return false; } } } return true; } }
Java
복사
startsWith 활용 - 효율성 테스트에서 시간 초과 발생
public class Pro42577 { public boolean solution(String[] phone_book) { int length = phone_book.length; for (int i = 0; i < length; i++) { for (int j = i + 1; j < length; j++) { if (phone_book[i].startsWith(phone_book[j])) { return false; } if (phone_book[j].startsWith(phone_book[i])) { return false; } } } return true; } }
Java
복사
정렬을 활용한 풀이 - 효율성 테스트 성공, 정확성 테스트 실패
import java.util.Arrays; public class Pro42577 { public boolean solution(String[] phone_book) { Arrays.sort(phone_book); boolean result = true; int length = phone_book.length; for (int i = 0; i < length - 1; i++) { if (phone_book[i + 1].contains(phone_book[i])) { result = false; break; } } return result; } }
Java
복사

느낀 점

substring, HashMap, 정렬, startsWith의 활용법에 대한 내용을 알 수 있었다.
접두어가 아닌 접미어를 구하는 경우에도 이와 유사한 로직을 활용하여 접근하면 해결할 수 있을 것이라는 생각이 들었다.