ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BOJ] 1713 후보 추천하기
    카테고리 없음 2023. 6. 12. 21:27

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

     

    1713번: 후보 추천하기

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

    www.acmicpc.net

    2023-06-12


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Scanner;
     
    public class Main1713 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int m = sc.nextInt();
     
            ArrayList<Integer> list = new ArrayList<>();
            HashMap<Integer, Integer> map = new HashMap<>();
            for(int i = 0; i < m; i++) {
                int num = sc.nextInt();
                if(list.contains(num)) map.put(num, map.get(num) + 1);
                else if(list.size() < n){
                    list.add(num);
                    map.put(num, 1);
                } else if(list.size() == n) {
                    int min = 987654321;
                    int idx = 0;
                    for(int j = 0; j < list.size(); j++) {
                        if(map.get(list.get(j)) < min) {
                            min = map.get(list.get(j));
                            idx = j;
                        }
                    }
                    map.remove(list.get(idx));
                    map.put(num, 1);
                    list.remove(idx);
                    list.add(num);
                }
            }
     
            StringBuilder sb = new StringBuilder();
            Collections.sort(list);
            for(int i = 0; i < list.size(); i++) sb.append(list.get(i)).append(" ");
     
            System.out.println(sb.toString());
        }
    }
    cs

     

    #문제풀이

     

    1) 사진틀에 이미 추천 받은 학생이 게시 되었는지 확인

    2) 사진틀이 다 채워졌는지 확인

    3) 사진틀이 다 채워진 경우 - 추천 받은 횟수가 가장 적은 학생 찾기

    (list에 오래된 순서로 쌓인거라서 2명 이상 있는 조건 굳이 체크 안 함) 

    4) 최종 학생 후보는 오름차순 정렬 

     

    예외 +) 사진틀에 전부 안 채워지는 경우가 있을 수 있음

     

     

    댓글

Programming Diary