본문 바로가기
알고리즘 & 자료구조/백준

백준 1700

by 신재권 2022. 8. 13.
package baekjoon.그리디;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

class Main1700 {

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

      int[] order = new int[K];
      st = new StringTokenizer(br.readLine());
      for (int i = 0; i < K; i++) {
         order[i] = Integer.parseInt(st.nextToken());
      }

      boolean[] used = new boolean[101];
      int ans = 0;
      int put = 0;
      for (int i = 0; i < K; i++) {
         int tmp = order[i];

         if (!used[tmp]) { // 2. 꽂혀 잇지 않은 경우
            if (put < N) {//2-1. 구멍이 넉넉하면, 비어있는 공간간에 꽂기
               used[tmp] = true;
               put++;
            } else {//2-2. 구멍이 없다면,
               ArrayList<Integer> list = new ArrayList<>();
               for (int j = i; j < K; j++) { //  콘센트들이 나중에 사용되는지 확인
                  if (used[order[j]] && !list.contains(order[j])) {
                     list.add(order[j]);
                  }
               }

               if (list.size() != N) {//2-2-1. 콘센트중 일부만 나중에 사용된다면,
                  for (int j = 0; j < used.length; j++) {
                     if (used[j] && !list.contains(j)) { //나중에 사용되지 않는 콘센트 제거
                        used[j] = false;
                        break;
                     }
                  }
               } else {//2-2-2. 콘텐츠중 모두 나중에 사용된다면,
                  int remove = list.get(list.size() - 1);  // 늦게 사용되는 콘센트를 제거
                  used[remove] = false;
               }
               used[tmp] = true;
               ans++;
            }
         }
         //  1. 이미 꽂혀있다
      }

      System.out.println(ans);

   }

}

'알고리즘 & 자료구조 > 백준' 카테고리의 다른 글

백준 7568  (0) 2022.08.16
백준 2847  (0) 2022.08.15
백준 1783  (0) 2022.08.12
백준 2720  (0) 2022.08.11
백준 2437  (0) 2022.08.10