package boj_1713;

import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

/**
 * 백준 온라인 저지 1713번 (후보 추천하기) 문제풀이
 *
 * @see https://www.acmicpc.net/problem/1713
 * @author devetude
 */
public class Main {
	// 공백 문자열 상수
	private static final String SPACE = " ";

	public static void main(String args[]) throws Exception {
		// 입력 값을 받음
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int cnt = sc.nextInt();

		// 큐 객체 변수 초기화
		Queue<Integer> queue = new LinkedList<>();

		// 후보 추천 수 저장 배열 초기화
		int[] points = new int[cnt + 1];

		for (int i = 0; i < cnt; i++) {
			int idx = sc.nextInt();
			points[idx]++;

			// 이미 해당 후보의 사진이 걸려있지 않은 경우에만
			if (!queue.contains(idx)) {
				// 후보의 사진이 사진틀의 갯수 보다 많을 경우에만
				if (queue.size() >= N) {
					Iterator<Integer> iterator = queue.iterator();
					int minPointIdx = iterator.next();

					// 가장 추천 수가 적은 후보를 찾아냄 (추천 수가 같은 경우 오래 걸려있던 순서또한 찾아냄)
					while (iterator.hasNext()) {
						int comparingIdx = iterator.next();

						if (points[comparingIdx] < points[minPointIdx]) {
							minPointIdx = comparingIdx;
						}
					}

					// 해당 후보를 큐에서 삭제 및 값을 0으로 만듬
					queue.remove(minPointIdx);
					points[minPointIdx] = 0;
				}

				// 해당 후보의 사진을 사진틀에 추가
				queue.offer(idx);
			}
		}

		sc.close();

		// 큐를 오름차순으로 정렬
		Collections.sort((LinkedList<Integer>) queue);

		// 버퍼를 통해 결과 값을 만듬
		StringBuilder sb = new StringBuilder();

		while (!queue.isEmpty()) {
			sb.append(queue.poll()).append(SPACE);
		}

		// 결과 값 한꺼번에 출력
		System.out.println(sb.toString());
	}
}
@@ -12,16 +12,81 @@
 _1713;%0A%0A
+import java.io.BufferedReader;%0Aimport java.io.InputStreamReader;%0A
 import j
@@ -107,16 +107,16 @@
 ctions;%0A
-
 import j
@@ -205,20 +205,28 @@
 a.util.S
-cann
+tringTokeniz
 er;%0A%0A/**
@@ -472,16 +472,23 @@
 n %7B%0A%09%09//
+ %EB%B2%84%ED%8D%BC%EB%A5%BC %ED%86%B5%ED%95%B4
  %EC%9E%85%EB%A0%A5 %EA%B0%92%EC%9D%84 %EB%B0%9B
@@ -495,30 +495,66 @@
 %EC%9D%8C%0A%09%09
-Scanner sc
+BufferedReader br
  = new 
-Scann
+BufferedReader(new InputStreamRead
 er(S
@@ -562,16 +562,17 @@
 stem.in)
+)
 ;%0A%09%09int 
@@ -579,44 +579,161 @@
 N = 
-sc.nextInt();%0A%09%09int cnt = sc.nextInt
+Integer.parseInt(br.readLine());%0A%09%09int cnt = Integer.parseInt(br.readLine());%0A%09%09StringTokenizer st = new StringTokenizer(br.readLine(), %22 %22);%0A%0A%09%09br.close
 ();%0A
@@ -906,19 +906,39 @@
 x = 
-sc.nextInt(
+Integer.parseInt(st.nextToken()
 );%0A%09
@@ -1578,28 +1578,13 @@
 %09%09%7D%0A
+
 %09%09%7D%0A%0A
-%09%09sc.close();%0A%0A
 %09%09//

modify problem 1713