ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BOJ]1700_멀티탭스케줄링
    알고리즘문제풀이/백준 2021. 11. 22. 13:03

    --문제--

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

     

    1700번: 멀티탭 스케줄링

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

    www.acmicpc.net

    --문제 접근--

    그리디 탐색의 문제
    N=멀티탭 구멍의 개수 K는 전기용품의 총 사용 횟수 두 번째 줄에는 전기용품의 이름
     TC 1
     2 7
     2 3 2 3 1 2 7
    고려해야할점
    멀티탭의 개수, 나중에 이 용품이 다시 사용될 것인가? 이 두 가지를 중점적으로 생각해보기.
    시나리오
    1.멀티 탭이 여유롭다면 그냥 바로 꽂기
    2. 여유가 없는데 만약 이미 꽂아진 전기용품이라면 그냥 skip
    이제부터 크게 고려해야 할 점!!
    만약 여유가 없는데 이미 꽂아진 전기용품도 아니라면 나중에 이 용품이 다시 사용될 것인가를 고려해야 합니다.
    뽑아야 할 것중 나중에 사용할 것이 없다면 그것 뽑아서 바로 넣기.
    둘 다 나중에 사용한 다면? 그중에 순서가 그나마 늦게 사용되는 것을 뽑기(여기서 중요한 점은 가장 나중에 사용되는 것을 고려할 때 중복을 허용하지 않는다는 점!)

    package 준비운동;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Map;
    import java.util.Scanner;
    
    public class BOJ_1700_멀티탭스케줄링 {
    //	그리디 탐색의 문제
    //	N=멀티탭 구멍의 개수 K는 전기용품의 총 사용횟수 두번째 줄에는 전기용품의 이름
    //	 TC 1
    //	 2 7
    //	 2 3 2 3 1 2 7
    //	고려해야할점
    //	멀티탭의 개수, 나중에 이 용품이 다시 사용될 것인가? 이 두가지를 중점적으로 생각해보기.
    //	시나리오
    //	1.멀티 탭이 여유롭다면 그냥 바로 꽂기
    //	2.여유가 없는데 만약 이미 꽂아진 전기용품이라면 그냥 skip
    //	이제부터 크게 고려해야할점!!
    //	만약 여유가 없는데 이미 꽂아진 전기용품도아니라면 나중에 이 용품이 다시 사용될 것인가를 고려해야합니다.
    //	뽑아야 할 것중 나중에 사용할 것이 없다면 그것 뽑아서 바로 넣기.
    //	둘다 나중에 사용한 다면 ? 그중에 순서가 그나마 늦게 사용되는 것을 뽑기
    	public static void main(String[] args) {
    		Scanner sc=new Scanner(System.in);
    		LinkedList<Integer> left=new LinkedList<>();
    		LinkedList<Integer> right=new LinkedList<>();
    		List<Integer> temp=new ArrayList<>();
    		int N=sc.nextInt();
    		int K=sc.nextInt();
    		int[] elect=new int[K];
    		int tmp=0;
    		for(int i=0;i<K;i++) {
    			int n=sc.nextInt();
    			elect[i]=n;
    			//1번과정
    			if(tmp<N) {
    				if(!left.contains(n)) {
    					left.add(n);
    					tmp++;
    				}else {
    					continue;
    				}
    			}
    			else right.add(n);
    		}
    		int ans=0;
    		int size=right.size();
    		for(int i=0;i<size;i++) {
    			int n=right.poll();
    			if(left.contains(n)) {
    				continue;
    			}
    			temp=new ArrayList<>();
    			boolean check=false;
    		
    			for(int j=0;j<N;j++) {
    				if(!right.contains(left.get(j))) {
    					
    					left.remove(left.indexOf(left.get(j)));
    					left.add(n);
    					ans++;
    					check =true;
    					break;
    				}
    			}
    			if(check)continue;
    			for(int j=0;j<right.size();j++) {
    				if(left.contains(right.get(j))&&!temp.contains(right.get(j))) {
    					temp.add(right.get(j));
    				}
    			}
    			
    			int tempV=temp.get(temp.size()-1);
    			ans++;
    			left.remove(left.indexOf(tempV));
    			left.add(n);
    		}
    		System.out.println(ans);
    		
    		
     	}
    }

    '알고리즘문제풀이 > 백준' 카테고리의 다른 글

    [BOJ]1789_수들의합_Java  (0) 2021.11.23
    [BOJ]1916_최소비용구하기_JAVA  (0) 2021.11.22
    [BOJ]1062_가르침_JAVA  (0) 2021.10.22
    [BOJ]14719_빗물_JAVA  (0) 2021.10.21
    [BOJ]2178_JAVA_미로탐색  (0) 2021.10.18
Designed by Tistory.