티스토리 뷰
생각
Github - https://github.com/hellojdh/Code/blob/master/src/baekjoon/q1000/Q1700.java 멀티탭의 꼿을 수 있는 개수와 사용되어야할 기기가 순서대로 주어진다. 멀티탭에서 제품을 뽑는것을 최소화 할 때, 몇 번 뽑아야하는지 출력하여라.
처음 생각
콘센트의 꼽을 수 있는 수도 100개 꼽는 기기의 수도 최대 100개이다. 수가 작으므로 다 살펴보면서 진행을 하였다.
▶ 현재 꼿혀있는데 똑같은게 들어올 경우는 바로 다음 기기를 봐도 상관없으므로 HashSet을 이용해서 꼿힌 기기들을 관리해 주었다.
다음 생각
꼿혀있지 않을경우 2가지로 나눠진다. 1) 콘센트에 자리가 없을경우 2) 콘센트에 자리가 있을경우 로 나눠진다.
▶ 1)의 경우는 HashSet에 있는 기기들을 가지고 현재 idx 이후로 해당 기기가 있는지 없는지를 판단한다. 만약 해당 기기가 사용안되면 바로 그 기기를 제거해준 후 새로운 기기를 꼽는다.
▶ 해당기기가 또 사용된다면 index를 비교해서 가장 큰 index를 가지고 있는 기기를 제거해준다.
▶ 2)의 경우는 바로 HashSet에 넣어주었다.
다다음 생각
뽑는 경우의 수를 출력하는 것이므로 HashSet에서 remove를 해줄 때 결과값을 +1 시켜주었다.
방안
1) 처음에는 PrioirtyQueue등을 이용해서 효율적으로 구현을 해보려고했었는데 개수가 최대 100개 밖에 안되므로 모든 경우를 살펴보았다.
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 | package baekjoon.q1000; import java.util.HashSet; import java.util.Scanner; public class Q1700 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); // 구멍의 개수 int m = sc.nextInt(); // 제품 수 int[] arr = new int[m]; for(int i=0;i<m;i++) arr[i] = sc.nextInt(); int result = 0; HashSet<Integer> set = new HashSet<>(); for(int i=0;i<m;i++){ int t = arr[i]; // 이미 꼽혀있는 거면 그대로 가져간다 if(set.contains(t)) continue; // 새로 꼽아야할 경우 // 1) 다 꼽혀있다면 if(set.size()==n){ int idx = -3, target = 0; for(int tt:set){ int tIdx = 9999; // 제일 안쓰이는 걸 찾자. for(int j=i+1;j<m;j++){ // 똑같은게 있다면 해당 index 저장 if(tt==arr[j]){ tIdx = j; break; } } // tIdx가 변하지 않았다면 이 뒤로 사용되지 않는다는 것이다. if(tIdx==9999){ target = tt; break; }else{ // 가장 나중에 사용되는걸 찾자. if(tIdx>idx){ idx = tIdx; target = arr[tIdx]; } } } // 콘센트 빼주기 set.remove(target); result++; } // 2) 남는 곳이 있다면 set.add(t); } System.out.println(result); } } |
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 10951번 A+B - 4 (0) | 2018.11.16 |
---|---|
[백준] 2839번 설탕 배달 (0) | 2018.11.16 |
[백준] 11000번 강의실 배정 (0) | 2018.11.12 |
[백준] 1931번 회의실배정 (0) | 2018.11.11 |
[백준] 11047번 동전 0 (0) | 2018.11.11 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday