https://programmers.co.kr/learn/courses/30/lessons/42577
문제 풀이
import java.util.Arrays;
class Solution {
public boolean solution(String[] phone_book) {
Arrays.sort(phone_book);
for(int i = 0; i < phone_book.length - 1; i++) {
if(phone_book[i + 1].startsWith(phone_book[i])) {
return false;
}
}
return true;
}
}
일일히 이중 for문 loop를 통해 해결하는 방법도 있지만, 아마 효율성 테스트를 통과하지 못할 것 같다...
"접두어"라는 키워드에 맞춰서 배열을 정렬한 후 앞의 배열 요소가 뒤의 요소의 접두어가 되는지 판단하고,
(contains가 아닌 startsWith를 사용하는 이유, 그런데 contains로 해도 클리어였다)
접두어인 경우에 바로 return false를 해주었다.
그 외에 접두어가 아닌 모든 경우에 대해서는 return true를 마지막에 반환한다.
문제 유형은 해시인데.. 오히려 복잡해지는것 같고 아이디어가 바로 떠오르지 않았다.
이론 1. 정렬 (Arrays.sort () )
학부때 정렬 알고리즘을 배우면서 구현하는 과정을 통해 일일이 메소드화해서 sort 함수를 구현했었다.
이제는 Java에서 제공하는 Arrays.sort() 메소드를 활용하고 있다.
1) 오름차순 정렬
// 기본 정렬이다. (작은 요소 -> 큰 요소)
Arrays.sort(arr);
2) 내림차순 정렬
// 역순 정렬이다. (큰 요소 -> 작은 요소)
Arrays.sort(arr, Collections.reverseOrder());
3) 범위 지정 정렬
// 정렬할 범위를 지정해준다.
Arrays.sort(arr, startIndex, endIndex);
이론 2. contains와 startsWith
contains() 메소드와 startsWith 메소드는 모두 문자열과 관련하여
인자로 전달하는 문자열이 포함되는지 여부를 반환한다. 단, startWith는 맨 앞에 포함되는 지가 조건이다.
메소드 실행 결과를 Boolean type으로 반환한다.
다음은 contains와 startsWith의 사용 예이다.
//str1에 str2가 포함되는지 검사한다.
str1.contains(str2);
//str1이 str2로 시작하는지 검사한다.
str1.startsWith(str2);
+) endsWith 도 있다.
이름에서 알 수 있듯이 전달된 인자의 문자열로 끝나는지 여부를 검사한다.
//str1이 str2로 끝나는지 검사한다.
str1.endsWith(str2);
'기록 > 알고리즘' 카테고리의 다른 글
[프로그래머스] 타겟 넘버 (0) | 2021.04.03 |
---|---|
[프로그래머스][그리디] 체육복 (0) | 2021.04.02 |
[프로그래머스] [Hash] 완주하지 못한 선수 (0) | 2021.02.08 |
백준 1775번) 부녀회장이 될 테야 (0) | 2020.06.24 |
백준 10250번) ACM 호텔 (0) | 2020.06.24 |