카테고리 없음

[백준/JAVA] 1700번: 멀티탭 스케줄링

imname1am 2023. 5. 22. 12:06
반응형

🔺 문제

 

1700번: 멀티탭 스케줄링

기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전

www.acmicpc.net

 

 

🔺 코드

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import java.util.*;
import java.io.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        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[] use = new boolean[101];
        int put = 0;
        int ans = 0;
        
        for(int i = 0 ; i < K ; i++) {
            int tmp = order[i];
            
            // 콘센트가 안 꽂혀있는 경우
            if(!use[tmp]) {
                if(put < N) {   // 콘센트 꽂을 공간이 있는 경우
                    use[tmp] = true;
                    put++;
                }
                else {          // 콘센트 꽂을 공간이 없는 경우
                    ArrayList<Integer> list = new ArrayList<>();    // 현재 꽂힌 콘센트 中 나중에도 사용될 것으로 예측되는 콘센트 정보 담는 리스트
 
                    for(int j = i ; j < K ; j++) {  // 현재 꽂힌 콘센트가 나중에도 사용되는지 확인
                        if(use[order[j]] && !list.contains(order[j])) {
                            list.add(order[j]);     // 추후 사용 여부 확인
                        }
                    }
                    
                    if(list.size() != N) {  // 나중에도 사용되는 콘센트가 구멍 개수보다 작을 경우,
                        for(int j = 0 ; j < use.length ; j++) {
                            if(use[j] && !list.contains(j)) {   // 그 콘센트 제거
                                use[j] = false;
                                break;
                            }
                        }
                    }
                    else {  // 현재 꽂힌 모든 콘센트가 나중에도 사용될 경우,
                        int remove = list.get(list.size() - 1); // 가장 마지막에 사용될 콘센트 제거
                        use[remove] = false;
                    }
                    
                    use[tmp] = true;
                    ans++;
                }
            }
        }
        
        bw.write(ans + "\n");
        bw.flush();
        bw.close();
        br.close();
    }
}
 
cs
✅ 해결 아이디어
✔ 그리디
- 페이지 교체 알고리즘

 

 


🔺 다른 풀이들

- 상세 설명 굿..

 

백준 1700번: 멀티탭 스케줄링 (JAVA)

https://www.acmicpc.net/problem/1700 1700번: 멀티탭 스케줄링 기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러

bleron.tistory.com

 

 


💬 느낀 점

페이지 교체 알고리즘을 이렇게 써먹는구나...

정처기 암기할 때 보기만 했었는데....

익숙해져보자...

 

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

 

[BOJ] 백준 1700번 : 멀티탭 스케줄링 (JAVA)

문제의 링크 : https://www.acmicpc.net/problem/17001700번: 멀티탭 스케줄링기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충

steady-coding.tistory.com

 

반응형