-
프래그래머스 (Level 2) - 전화번호 목록Coding Test/Coding Test 문제 풀이 2021. 12. 28. 11:00
문제 설명
코딩테스트 연습 - 전화번호 목록
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조
programmers.co.kr
풀이
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하는 문제이다.
처음에는 이중 반복문을 통해 전화번호부 내 모든 번호들을 startsWith() 함수를 이용해서 비교하는 방식으로 해결하려고 했었다. 하지만, 시간 효율성을 측정하는 문제여서 이 방법은 적절하지 않다고 생각했다.
전화번호를 비교하기 위해서는 빠른 검색에 유용한 자료구조가 필요했고, HashSet 자료구조를 사용했다.
우선, 전화번호부(phone_book)에 적힌 모든 전화번호들을 HashSet 자료구조에 추가한다.
Hashing 처리가 끝났으면, substring() 함수를 통해서 각 전화번호의 접두어를 파악하고, contains() 함수를 통해 전체 전화번호와 비교하는 방식으로 문제를 해결했다.
전체 소스코드
import java.io.*; import java.util.*; public class Solution01 { public boolean solution(String[] phone_book) { Set<String> set = new HashSet<>(); for (String number : phone_book) set.add(number); boolean answer = true; for (String number : phone_book) { for (int i = 0; i < number.length(); i++) { if (set.contains(number.substring(0, i))) return false; } } return answer; } }
728x90'Coding Test > Coding Test 문제 풀이' 카테고리의 다른 글
프로그래머스 (Level 2) - 더 맵게 (0) 2021.12.28 프로그래머스 (Level 2) - 기능개발 (0) 2021.12.28 프래그래머스 (Level 1) - 모의고사 (0) 2021.12.27 프로그래머스 (Level 1) - K번째수 (0) 2021.12.27 프로그래머스 (Level 1) - 완주하지 못한 선수 (0) 2021.12.26