문제
- 학생 이름이 공백으로 구분된 문자열 A가 주어진다.
- 문자열 A에는 중복된 학생 이름이 존재하지 않는다.
- 학생 이름은 알파벳 소문자로 이루어져 있다.
- 각 학생이 좋아하는 학생의 학생 이름 목록이 공백으로 구분된 문자열로 주어진다.
- 각 학생이 좋아하는 학생은 1명 이상 주어지고, 내가 나를 좋아하는 예는 없다.
- 나를 좋아하는 학생이 많을수록 나의 인기도가 높다.
- 인기도가 높은 학생부터 낮은 학생 순으로 학생 이름과 해당 학생을 좋아하는 학생 수를 출력하자.
- 인기도가 같은 경우 학생 이름 기준으로 오름차순으로 출력하자.
호출된 숫자만큼 내림차순으로. 인기도가 같으면 학생이름기준 오름차순.
1. 문자열을 파싱해서 횟수를 추출한다.
2. comparator를 커스텀으로 구현해서 인기도 내림차순, 인기도가 같으면 compareTo
linkedHashMap 사용?
1. 배열에 학생이름 저장하고 Map에 개수 저장?
package 백준.학생인기도측정25325;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
String[] arr = new String[count];
Map<String, Integer> map = new HashMap<String, Integer>();
String[] data = br.readLine().split(" ");
for (int i = 0; i < count; i++) {
arr[i] = data[i];
map.put(arr[i], 0);
}
for (int i = 0; i < count; i++) {
String[] personalLikeArray = br.readLine().split(" ");
for (int j = 0; j < personalLikeArray.length; j++) {
map.put(personalLikeArray[j], map.get(personalLikeArray[j]) + 1);
}
}
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (map.get(o1) < map.get(o2)) {
return 1;
}
if (map.get(o1) == map.get(o2)) {
return o1.compareTo(o2);
}
return -1;
}
});
for (int i = 0; i < count; i++) {
System.out.println(String.join(" ", arr[i], String.valueOf(map.get(arr[i]))));
}
br.close();
}
}
'자바 코딩테스트' 카테고리의 다른 글
리트코드 1385 (1) | 2025.04.22 |
---|---|
리트코드 349 두 배열의 교집합 (0) | 2025.04.22 |
백준 29723 브실이의 입시전략 (1) | 2025.04.17 |
백준 1181 단어정렬 (1) | 2025.04.16 |
백준 25757 임스와 함께하는 미니게임 (1) | 2025.04.15 |