본문 바로가기
Problem Solving/Programmers

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

by 테리는당근을좋아해 2020. 4. 1.

문제설명

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.

  • 구조대 : 119
  • 박준영 : 97 674 223
  • 지영석 : 11 9552 4421

전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.

제한 사항

  • phone_book의 길이는 1 이상 1,000,000 이하입니다.
  • 각 전화번호의 길이는 1 이상 20 이하입니다.

해결 방법

1) 배열에서 문자열 하나를 읽어들인다.

 

2) 입력된 문자열과 저장된 문자열과 비교해 하나가 접두어가 될 경우 false를 반환한다.

 

3) 접두어가 아닐경우 문자열을 저장하고 1)번과정으로 돌아간다.

 

JAVA

package programmers;

import java.util.*;

public class p_42577 {
	public static boolean solution(String[] s) {
		HashSet <String> map = new HashSet<>();
		for(String num : s) {
			for(String cmp : map) {
				int len = Math.min(num.length(), cmp.length());
				if(num.substring(0, len).equals(cmp.substring(0, len))) {
					return false;
				}
			}
			map.add(num);
		}
		return true;
	}
	public static void main(String[] args) {
		String[] s = {"119", "97674223", "1195524421"};
		String[] s2 = {"123","456","789"};
		String[] s3 = {"12","123","1235","567","88"};
		System.out.println(solution(s3));
	}
}

'Problem Solving > Programmers' 카테고리의 다른 글

[프로그래머스] H-Index  (0) 2020.04.02
[프로그래머스] 더 맵게  (0) 2020.04.02
[프로그래머스] 소수찾기  (0) 2020.04.01
[프로그래머스] 가장 큰 수  (0) 2020.04.01
[프로그래머스] 쇠막대기  (0) 2020.04.01

댓글