728x90
문제
접근 방식
정렬한 후에 반복문으로 카드 수를 일일이 체크하는 것이 더 빠르지만
Comparator 사용에 익숙해질 겸 한 번의 정렬만으로 해결해 봤다.
맵을 사용 해서 카드의 수를 키로 하고
값을 해당 카드가 등장할 때마다 1씩 증가시켜 줬다.
맵은 배열처럼 하나의 객체와 타입으로만 이루어진 것이 아니기 때문에
맵을 정렬하기 위해선 entrySet 메서드를 사용하여 셋이나 리스트로 바꿔줘야 한다.
List<Map.Entry<Long, Integer>> entries = new ArrayList<>(cards.entrySet());
entries.sort(
(o1, o2) -> {
int ov = o1.getValue();
int tv = o2.getValue();
long ok = o1.getKey();
long tk = o2.getKey();
if (ov < tv) {
return 1;
} else if (ov > tv) {
return -1;
} else {
if (ok < tk) {
return -1;
} else if (ok > tk) {
return 1;
} else {
return 0;
}
}
}
);
이번 풀이에서는 리스트를 사용하여 정렬을 하였고
이전 문제에서 풀었던 것처럼 Comparator를 구현하여
sort 메서드의 정렬 기준으로 전달해 주었다.
우선 가장 많이 등장한 횟수 기준으로 정렬하기 위해
값을 최우선 순위로 비교한 후에 키를 기준으로 비교해 주면 된다.
풀이
public class Main {
public static void main(String[] args) throws IOException {
}
}
'Java > Algorithms' 카테고리의 다른 글
[백준] 1181번 : 단어 정렬 (0) | 2023.11.16 |
---|---|
[백준] 5648번 : 역원소 정렬 (0) | 2023.11.16 |
[백준] 1431번 : 시리얼 번호 (1) | 2023.11.16 |
정렬 문제 해결을 위한 Comparator / Comparable (1) | 2023.11.16 |
[백준] 1600번 : 말이 되고픈 원숭이 (1) | 2023.11.15 |