백준 1713 - 후보 추천하기(java)
알고리즘/백준

백준 1713 - 후보 추천하기(java)

www.acmicpc.net/problem/1713

 

1713번: 후보 추천하기

첫째 줄에는 사진틀의 개수 N이 주어진다. (1≤N≤20) 둘째 줄에는 전체 학생의 총 추천 횟수가 주어지고, 셋째 줄에는 추천받은 학생을 나타내는 번호가 빈 칸을 사이에 두고 추천받은 순서대로

www.acmicpc.net

1. 유형

우선순위 정렬, 구현

 

2. 자료구조

ArrayList

 

3. 기능

N개의 프레임 중에서 중복된 것을 찾기 -> 추천수 업

중복되지 않으면 -> 앞에꺼 제거후 푸쉬

N개가 다 채워졌는지 탐색 -> 다 채워짐

 

4. 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.StringTokenizer;

public class Main {
	static int N, K;

	static class Pair implements Comparable<Pair> {
		int val, up, day;

		public Pair(int val, int up, int day) {
			this.val = val;
			this.up = up;
			this.day = day;
		}

		@Override
		public int compareTo(Pair o) {
			if (this.up == o.up) {
				return this.day - o.day;
			}
			return this.up - o.up;
		}
	}

	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(in.readLine());
		N = Integer.valueOf(st.nextToken());
		st = new StringTokenizer(in.readLine());
		K = Integer.valueOf(st.nextToken());
		st = new StringTokenizer(in.readLine());
		ArrayList<Pair> list = new ArrayList<>();
		for (int i = 0; i < K; i++) {
			int num = Integer.valueOf(st.nextToken());
			boolean flag = false;
			for (Pair pair : list) {// 같은게 있는지 파악
				if (pair.val == num) {
					flag = true;
					pair.up++;
					break;
				}
			}
			if (!flag) {
				if (list.size() == N) {
					list.remove(0);
					list.add(new Pair(num, 1, i));
				}else {// 아직 프레임이 꽉 안참
					list.add(new Pair(num, 1, i));
				}
			} 
			Collections.sort(list);
		}
		Collections.sort(list, new Comparator<Pair>() {
			@Override
			public int compare(Pair o1, Pair o2) {
				return o1.val - o2.val;
			}
		});
		for (Pair p : list) {
			System.out.print(p.val + " ");
		}
	}
}

5. 배운점

Collections.sort를 할때 내장 함수 사용하기.

new Comparator<Pair>(){

} 이 부분이 헷갈렸다.

 

다음 사용에서 까먹지 않도록 복습