반응형
프로그래머스 - [Level 2] 전화번호 목록
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 분석
- 전화번호부가 주어진다.
- 전화번호부 중에서 하나의 번호가 다른 번호의 접두사인 경우가 있는지 확인한다.
- 구조대 : 119
박준영 : 97 674 223
지영석 : 11 9552 4421 - 이 때, 지영석 번호의 접두사가 구조대 번호이므로 존재하는걸로 판단.
- 구조대 : 119
- 있을 경우 false, 아닐 경우 true를 리턴한다.
해결 키 포인트
- 문자열 정렬로 구현
- 문자열 배열을 내림차순으로 정렬
- Arrays.sort(phone_book, Collections.reverseOrder());
- 문자열 정렬이므로, 숫자 정렬이 아니라 비슷한 문자열이 근처에 되도록 정렬된다.
예를 들어, 119, 120, 11920202 이 존재할 때 문자열 정렬하면 120, 11920202, 119 로 정렬된다.
- 내림차순으로 정렬했으니, 현재 문자열의 앞부분이 다음 인덱스에 문자열과 동일한지 비교
- 1번 방법 : 문자열 앞에 부분을 다음 인덱스 길이만큼 자른 후(substring) 동일한지 여부 확인 (equals)
- 2번 방법 : 문자열이 다음 문자열로 시작하는지 여부 확인 (startWith)
// 1번 방법
phone_book[i].substring(0, phone_book[i+1].length()).equals(phone_book[i+1]);
// 2번 방법
phone_book[i].startsWith(phone_book[i+1];
- 추가적인 해결 방법 : 해시 맵 사용
코드
import java.util.Arrays;
import java.util.Collections;
class Solution {
public boolean solution(String[] phone_book) {
Arrays.sort(phone_book, Collections.reverseOrder());
for (int i = 0; i < phone_book.length-1; i++) {
if (phone_book[i].startsWith(phone_book[i+1]))
return false;
}
return true;
}
}
반응형
'CodingTEST' 카테고리의 다른 글
[백준 1149] RGB거리 (JAVA) (0) | 2024.01.14 |
---|---|
[백준 16953] A → B (JAVA) (0) | 2024.01.14 |
[백준 11725] 트리의 부모 찾기(JAVA) (0) | 2024.01.12 |
[백준 14500] 테트로미노(JAVA) (1) | 2024.01.06 |
[백준 9019] DSLR (JAVA) (2) | 2024.01.06 |