삐까냥의 파도타기
1700번) 멀티탭 스케줄링 - 그리디 본문
문제 출처 : https://www.acmicpc.net/problem/1700
import java.util.Scanner; public class Q1700 { static int[][] multiTab; static int[] jobList; public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int size = sc.nextInt(); //구멍 개수 int num = sc.nextInt(); multiTab = new int[size][2]; jobList = new int[num]; for ( int i = 0; i < num; i++ ) { jobList[i] = sc.nextInt(); }
int nowPoint = 0; int result = 0;
while ( nowPoint < num ) {
if ( !isExist(size, nowPoint) ) { //사용할 전자기기를 지금은 사용하지 않는 중 int changeNumber = 0; for ( int i = 0; i < size; i++ ) { //현재 사용중인 전자기기마다 얼마나 나중에 사용할 지 계산하기 int temp = multiTab[i][0]; multiTab[i][1] = 0;
for ( int j = nowPoint; j < num; j++ ) { if ( temp == jobList[j] ) { //언제 사용할지 발견했으면 multiTab[i][1] = j - nowPoint + 1; //언제 사용할지 기록 break; } }
if ( multiTab[i][1] == 0 ) { //앞으로 사용하지 않은 전자기기를 발견하면 바로 교체하기 changeNumber = i; break; }
//제일 나중에 사용하는 전자기기 기록 changeNumber = multiTab[changeNumber][1] > multiTab[i][1] ? changeNumber : i; }
//새로운 전자기기 사용하기 multiTab[changeNumber][0] = jobList[nowPoint]; result++; } nowPoint++; } System.out.println(result - size); }
static boolean isExist(int size, int nowPoint) { for ( int j = 0; j < size; j++ ) { if ( multiTab[j][0] == jobList[nowPoint] ) { //이미 있다면 return true; } } return false; } } |
뭔가 깔끔하지 못한 코드 입니다.
하.... 나중에 다시 도전!
'코딩 > 백준 알고리즘' 카테고리의 다른 글
1068번) 트리 - 그래프 (0) | 2017.10.28 |
---|---|
4963번) 섬의 개수 - 그래프 (0) | 2017.10.28 |
1049번) 기타줄 - 그리디 (0) | 2017.10.27 |
2875번) 대회 or 인턴 - 그리디 (0) | 2017.10.27 |
10610번) 30 - 그리디 (0) | 2017.10.27 |