티스토리 뷰

프로그래머스 42577번 - 전화번호 목록

프로그래머스 42577번 - https://programmers.co.kr/learn/courses/30/lessons/42577

 

요구사항

1. 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있으면 false, 그렇지 않으면 true를 반환하라.

 

요구사항 분석 및  풀이과정

1. 보는 관점을 바꾸면 풀이가 쉬워진다. 

 

한 번호가 다른 번호의 접두어인 경우가 있는가

<=>

한 번호의 접두어가 될 수 있는 문자열 중 전화번호부에 있는 번호가 있는가

 

2. 전화번호부에 특정 번호가 있는지 빠르게 확인하기 위하여 전화번호부를 Set(HashSet)을 이용하여 만들어줍니다.

3. 전화번호부에 등록된 번호를 순회하면서 해당 번호의 모든 접두어에 대하여 전화번호부에 있는 번호인지를 검사합니다.

 

그림으로 살펴보면 다음과 같습니다. 전화번호부는 ["12", "123", "1235"]라고 해보겠습니다.

 

 

 

전화번호 "123"의 접두어가 될 수 있는 문자열은 "1", "12" 인데, "12" 문자열은 전화번호부에 존재합니다.

이 말은 전화번호 "12"가 존재하고, 전화번호 "123"의 접두어라는 의미입니다.

 

소스코드 작성

import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;

class Solution {

	public boolean solution(String[] phoneBook) {
		Set<String> table = Arrays.stream(phoneBook).collect(Collectors.toSet());

		for (String phone : table) {
			for (int i = 1; i < phone.length(); i++) {
				if (table.contains(phone.substring(0, i))) {
					return false;
				}
			}
		}

		return true;
	}
}

 

결과

 

소스코드 깃허브 주소

링크

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함