package day25.P1713_후보추천하기;
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); // 사진틀의 개수
int K = sc.nextInt(); // 학생들의 총 추천 횟수
Candidate[] candidates = new Candidate[101]; // 후보자 번호가 100번까지여서 걍 인덱스 1부터 쓸라고 101개만듦.
LinkedList<Integer> list = new LinkedList<>();
for (int i = 0; i < K; i++) {
int num = sc.nextInt();
if (candidates[num] == null) {
if (list.size() == N) { // 사진틀이 가득 찼을 때
int removed = list.removeFirst(); // 가장 오래된 학생 제거
candidates[removed] = null;
}
candidates[num] = new Candidate(num, 0, i, true); // 새 학생 추가
list.addLast(num);
} else {
candidates[num].recommend++; // 이미 존재하는 학생의 추천 횟수 증가
}
// 사진틀의 순서를 정하는 부분
list.sort((o1, o2) -> {
if (candidates[o1].recommend == candidates[o2].recommend) {
return candidates[o1].time - candidates[o2].time;
}
return candidates[o1].recommend - candidates[o2].recommend;
});
}
// 정렬된 사진틀에 있는 학생들을 출력
for (int student : list) {
System.out.print(student + " ");
}
}
static class Candidate {
int num; // 학생 번호
int recommend; // 추천 횟수
int time; // 사진틀에 들어온 시간
boolean exist; // 사진틀에 존재하는지 여부
public Candidate(int num, int recommend, int time, boolean exist) {
this.num = num;
this.recommend = recommend;
this.time = time;
this.exist = exist;
}
}
}
1713 후보 추천하기
근데 마지막 출력 부분에 오름차순으로 출력되도록 만들어야 하는데
난 계속 6 7 2 로 출력됨
이 부분 수정해서 제출해야할듯
'공부기록 > 알고리즘' 카테고리의 다른 글
[알고리즘] 4일차 (0) | 2024.02.16 |
---|---|
[알고리즘] 3일차 (0) | 2024.02.15 |
[알고리즘] P2143. 두 배열의 합 (0) | 2024.02.14 |
영리한 프로그래밍을 위한 알고리즘 강좌 - Ch3.레드블랙트리 (0) | 2023.08.12 |
영리한 프로그래밍을 위한 알고리즘 강좌 - Ch2.이진검색트리 (0) | 2023.08.05 |