문제
번호
전화번호 목록 (프로그래머스 42577번)
내용
전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다.
전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다.
-
구조대 : 119
-
박준영 : 97 674 223
-
지영석 : 11 9552 4421
전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요.
풀이
어떤 하나의 번호로 다른 번호가 시작하는지 판별하는 문제이다.
프로그래머스 42576(완주하지 못한 선수)와 유사한 문제로 Array를 문자 순서대로 정렬한 후 앞의 문자와 뒤의 문자를 비교하면 된다.
코드설명
- 이번 문제에서는 이중 for문을 사용하였는데 이는 뒤의 문자열들과 비교하기 위해서이다.
- <pre>Arrays.sort()</pre> 메소드를 통해 array를 정렬한다.
숫자의 배열이지만 String 타입이기 때문에 "1234"가 "23" 보다 앞서 정렬된다. - 또한 입력조건에 공백이 없기 때문에 공백은 신경쓰지 않아도 된다.
- <pre>for</pre>문을 통해 phone_book을 탐색하게 된다.
이 때 조건에 <pre>answer</pre>이 붙은 이유는 하나라도 다른 번호의 접두인 경우가 있으면 false가 되고 더이상 탐색할 필요 없이 return하면 되기 때문이다. - 안쪽의 <pre>for</pre>의 시작은 <pre>i</pre>부터이다. 만약 현재 번호가 다른 번호의 접두로 붙는다면 무조건 <pre>[현재 번호 + 다른 숫자]</pre> 이기 때문이다.
코드
import java.util.Arrays;
class Solution {
public boolean solution(String[] phone_book) {
boolean answer = true;
// Sort array
Arrays.sort(phone_book);
// Search whether the next contains current.
for(int i = 0 ; i < phone_book.length && answer ; i++) {
for(int j = i + 1 ; j < phone_book.length ; j++) {
if(phone_book[j].contains(phone_book[i])) {
answer = false;
break;
}
}
}
return answer;
}
}
'Etc > 문제 풀이' 카테고리의 다른 글
[프로그래머스 42586번] 기능개발 (0) | 2021.01.31 |
---|---|
[프로그래머스 42584번] 주식가격 (0) | 2021.01.30 |
[프로그래머스 42579번] 베스트앨범 (0) | 2021.01.28 |
[프로그래머스 42578번] 위장 (0) | 2021.01.26 |
[프로그래머스 42576번] 완주하지 못한 선수 (0) | 2021.01.26 |
댓글