Coding Test/Coding Test 문제 풀이

프래그래머스 (Level 2) - 전화번호 목록

임빈영 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