import java.util.Arrays;
import java.util.Collections;
class Solution {
public boolean solution(String[] phone_book) {
Arrays.sort(phone_book, Collections.reverseOrder());
HashSet<String> set = new HashSet<String>();
for(String s: phone_book) {
if(set.contains(s)) return false;
else {
for(int i = 1; i <= s.length(); i++) {
set.add(s.substring(0, i));
}
}
}
return true;
}
}
풀이 방식은 먼저 phone_book을 내림차순으로 정렬한다.
정렬의 이유는 길이가 긴것을 앞에 두기 위함이다.
이렇게 정렬한 다음 앞에서 차례대로 set에 그 값이 있는지 비교한다. set에는 지금까지 순회한 문자열의 모든 접두사가 들어있다. 그렇기 때문에 set에 값이 있다면 그 문자의 접두사와 해당 문자가 같다는 것을 의미한다.
만약 set에 값이 없다면 모든 접두사를 넣어주는 for 문을 실행한다.
예를 들면 이렇다.
["119", "97674223", "1195524421"] 의 경우 정렬 하면 =
1195524421,
97674223,
119
순으로 정렬된다.
그럼 1195524421의 경우 set 이 비어있으니 반복문으로 넘어간다.
반복문을 통해 set 에는 1, 11, 119, ~~ ,1195524421 가 들어가게 된다.
97674223도 set 에 없으니 반복문으로 넘어간다.
마지막으로 119 의 경우 앞에서 119를 넣어줬으니 정답은 false 가 나오게 된다.
Collections.sort(players, (a, b) -> b.getScore() - a.getScore());
List<Player> sortedPlayers = players.stream()
.sorted((a, b) -> b.getScore() - a.getScore())
.collect(Collectors.toList());
https://yuja-kong.tistory.com/entry/Java-%EA%B0%9D%EC%B2%B4-%EC%A0%95%EB%A0%AC-Comparable-Comparator