728x90

https://www.acmicpc.net/problem/1713

 

1713번: 후보 추천하기

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

www.acmicpc.net

 

 

 

 

 

풀이)

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class Main_BJ_1713_후보추천하기 {
    static class Info implements Comparable<Info>{
        int num;
        int cnt;
        int time;
        public Info(int num, int cnt, int time){
            this.num = num;
            this.cnt = cnt;
            this.time = time;
        }
        @Override
        public int compareTo(Info info){
            if(this.cnt==info.cnt)
                return this.time-info.time;
            else if(this.cnt<info.cnt)
                return -1;
            else return 1;
        }
    }//info

    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int p = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());

        LinkedList<Info> list = new LinkedList<>();
        for(int i=0; i<p; i++){
            int student = Integer.parseInt(st.nextToken());
            if(list.size() < n){
                boolean flag = false;
                for(int j=0; j<list.size(); j++){
                    if(list.get(j).num == student){
                        list.get(j).cnt++;
                        flag = true;
                        break;
                    }
                }
                if(!flag)
                    list.add(new Info(student, 1, i));
            }
            else {
                Collections.sort(list);
                boolean flag = false;
                for (int j = 0; j < list.size(); j++) {
                    //있을 때
                    if (list.get(j).num == student) {
                        list.get(j).cnt++;
                        flag = true;
                        break;
                    }
                }
                if(!flag){
                    list.remove(0);
                    list.add(new Info(student, 1, i));
                }
            }
        }

        int[] pic = new int[n];
        for(int i=0; i<list.size(); i++){
            pic[i] = list.get(i).num;
        }
        Arrays.sort(pic);
        for(int i=0 ;i<n; i++){
            if(pic[i] != 0)
                System.out.print(pic[i]+" ");
        }

    }//main
}

시간을 계산하기가.... 좀 까다로웠다..

처음에는 일일히 셌는데, 그럴필요 없이 class 하나 정해두고 만들면 된다.

 

또한, 시간 부분은 그냥 추천 그림 개수에 맞춰서 for문을 돌 때, Index로 저장해두면,

index가 작은 친구가 자동으로 오래 저장된 친구라 그렇게 하면 된다.

 

처음에 아주 간단하다고 생각하고 풀었는데,,,, 생각보다 많이 틀려서 당황한 문제...

728x90

'코테 > 백준' 카테고리의 다른 글

백준 5014 스타트링크(JAVA)  (0) 2023.06.15
백준 1316 그룹 단어 체커(JAVA)  (0) 2023.06.14
백준 7562 나이트의 이동(JAVA)  (0) 2023.06.04
백준 1912 연속합(JAVA)  (0) 2023.06.03
백준 15651 N과 M(3) (JAVA)  (0) 2023.05.31

+ Recent posts