티스토리 뷰

문제보러가기

 

코딩테스트 연습 - 전화번호 목록

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

programmers.co.kr

이문제는 해시문제이다. 해시 카테고리에 있어서 해시맵...? 해시테이블..? 써야하나,,,? 라고 생각하면서 해시 알고리즘에 대한 기본지식이 많이 부족하구나라고 깨달았다. 시간을 내서 한번 정리해봐야할것 같다.

 

 

문제풀이

-길이가 작은 숫자가 길이가 긴 숫자의 접두어가 될 수 있기 때문에 길이순, 후 숫자으로 정렬.

-숫자의 포함여부를 contains()를 통해 확인.

-포함시 answer을 false로 바꾸고 return

 

※접두어만 확인하는것이기 때문에 정렬되지 않은 상태에서는 쓸 수 없다!

 

다른사람들의 풀이를 보니 startWith()도 사용할 수 있겠더라,,, 

 

package programers;

import java.util.Arrays;

public class PhoneNumList {

	public static void main(String[] args) {
		boolean answer = true;
		String[] phone_book = {"12", "123", "1235", "567", "88"};
		Arrays.sort(phone_book);
		for(int i=1;i<phone_book.length;i++){
        	//길이가 작은데 붙어있는 경우에 접두어 포함의 가능성이 있음
            //이경우만 확인해줌
			if(phone_book[i-1].length()<phone_book[i].length()){
            	//접두어일 경우
				if(phone_book[i].contains(phone_book[i-1]))
					answer= false; // 프로그래머스에서는 요기서 리턴해주면됨
			}
		}
		System.out.println(answer);
	}

}

 

+다른사람의 풀이를 보니 if(phone_book[i-1].length()<phone_book[i].length()) 이부분은 필요가 없더라는,,, 이미 정렬하며 체크가 된 것 같다...ㅎ

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함