Skip to content

Commit 24e31bc

Browse files
committed
[Silver I] Title: 후보 추천하기, Time: 124 ms, Memory: 15744 KB -BaekjoonHub
1 parent 459a564 commit 24e31bc

File tree

2 files changed

+110
-0
lines changed

2 files changed

+110
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# [Silver I] 후보 추천하기 - 1713
2+
3+
[문제 링크](https://www.acmicpc.net/problem/1713)
4+
5+
### 성능 요약
6+
7+
메모리: 15744 KB, 시간: 124 ms
8+
9+
### 분류
10+
11+
구현, 시뮬레이션
12+
13+
### 제출 일자
14+
15+
2024년 12월 3일 11:27:15
16+
17+
### 문제 설명
18+
19+
<p>월드초등학교 학생회장 후보는 일정 기간 동안 전체 학생의 추천에 의하여 정해진 수만큼 선정된다. 그래서 학교 홈페이지에 추천받은 학생의 사진을 게시할 수 있는 사진틀을 후보의 수만큼 만들었다. 추천받은 학생의 사진을 사진틀에 게시하고 추천받은 횟수를 표시하는 규칙은 다음과 같다.</p>
20+
21+
<ol>
22+
<li>학생들이 추천을 시작하기 전에 모든 사진틀은 비어있다.</li>
23+
<li>어떤 학생이 특정 학생을 추천하면, 추천받은 학생의 사진이 반드시 사진틀에 게시되어야 한다.</li>
24+
<li>비어있는 사진틀이 없는 경우에는 현재까지 추천 받은 횟수가 가장 적은 학생의 사진을 삭제하고, 그 자리에 새롭게 추천받은 학생의 사진을 게시한다. 이때, 현재까지 추천 받은 횟수가 가장 적은 학생이 두 명 이상일 경우에는 그러한 학생들 중 게시된 지 가장 오래된 사진을 삭제한다.</li>
25+
<li>현재 사진이 게시된 학생이 다른 학생의 추천을 받은 경우에는 추천받은 횟수만 증가시킨다.</li>
26+
<li>사진틀에 게시된 사진이 삭제되는 경우에는 해당 학생이 추천받은 횟수는 0으로 바뀐다.</li>
27+
</ol>
28+
29+
<p>후보의 수 즉, 사진틀의 개수와 전체 학생의 추천 결과가 추천받은 순서대로 주어졌을 때, 최종 후보가 누구인지 결정하는 프로그램을 작성하시오.</p>
30+
31+
### 입력
32+
33+
<p>첫째 줄에는 사진틀의 개수 N이 주어진다. (1 ≤ N ≤ 20) 둘째 줄에는 전체 학생의 총 추천 횟수가 주어지고, 셋째 줄에는 추천받은 학생을 나타내는 번호가 빈 칸을 사이에 두고 추천받은 순서대로 주어진다. 총 추천 횟수는 1,000번 이하이며 학생을 나타내는 번호는 1부터 100까지의 자연수이다.</p>
34+
35+
### 출력
36+
37+
<p>사진틀에 사진이 게재된 최종 후보의 학생 번호를 증가하는 순서대로 출력한다.</p>
38+
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.util.ArrayList;
5+
import java.util.Collections;
6+
import java.util.List;
7+
import java.util.StringTokenizer;
8+
9+
public class Main {
10+
11+
public static void main(String[] args) throws IOException {
12+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
13+
14+
int N = Integer.parseInt(br.readLine());
15+
int M = Integer.parseInt(br.readLine());
16+
17+
List<Student> photos = new ArrayList<>();
18+
Student[] students = new Student[101];
19+
20+
StringTokenizer st = new StringTokenizer(br.readLine());
21+
for (int i = 0; i < M; i++) {
22+
int num = Integer.parseInt(st.nextToken());
23+
24+
25+
if (students[num] != null) {
26+
27+
students[num].cnt++;
28+
} else {
29+
30+
Collections.sort(photos);
31+
32+
if (photos.size() == N) {
33+
Student del = photos.remove(N - 1);
34+
students[del.num] = null;
35+
}
36+
37+
students[num] = new Student(num, 1, i);
38+
photos.add(students[num]);
39+
}
40+
}
41+
42+
Collections.sort(photos, (o1, o2) -> o1.num - o2.num);
43+
for (Student s : photos) {
44+
System.out.print(s.num + " ");
45+
}
46+
47+
br.close();
48+
}
49+
}
50+
51+
class Student implements Comparable<Student> {
52+
int num;
53+
int cnt;
54+
int timeStamp;
55+
56+
public Student(int num, int cnt, int timeStamp) {
57+
super();
58+
this.num = num;
59+
this.cnt = cnt;
60+
this.timeStamp = timeStamp;
61+
}
62+
63+
@Override
64+
public int compareTo(Student s2) {
65+
int resultCnt = s2.cnt - cnt;
66+
if (resultCnt == 0) {
67+
return s2.timeStamp - timeStamp;
68+
}
69+
return resultCnt;
70+
}
71+
72+
}

0 commit comments

Comments
 (0)