티스토리 뷰

Algorithm

백준_컨베이어벨트_20055

Young_J 2021. 2. 27. 21:50

// 알고리즘

1. 시뮬레이션

 

2. 컨베이어 벨트 위 / 아래 각각 한개씩 배열을 생성 

 

3. 컨베이어벨트 이동함수 ( moveC ) 작성

 

4. 로봇 이동함수 (moveR) 작성

 -> 로봇은 방문배열v 하나만 구현하면 됨. (위 배열만 필요 함.)

 

5. 계산

 -> 횟수 1 증가

 -> moveC

 -> moveR

 -> 올라가는 곳 (uArr[0] ) 확인 해서 로봇올리기

 -> 위 / 아래 배열에서 내구도가 0인 개수 확인

더보기
import java.util.*;
import java.io.*;

public class 컨베이어벨트_20055 {

	static int N, K, uArr[], dArr[], ans;
	static boolean[] v;

	public static void main(String[] args) throws Exception {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");

		N = Integer.parseInt(st.nextToken());
		K = Integer.parseInt(st.nextToken());

		uArr = new int[N];
		v = new boolean[N];
		dArr = new int[N];

		st = new StringTokenizer(br.readLine(), " ");
		for (int i = 0; i < N; i++) {
			uArr[i] = Integer.parseInt(st.nextToken());
		}

		for (int i = N - 1; i >= 0; i--) {
			dArr[i] = Integer.parseInt(st.nextToken());
		}

		cal();

		System.out.println(ans);

	}

	private static void cal() {

		while (true) {
			ans++;
			moveC();
			moveR();
			if (uArr[0] > 0) {
				uArr[0]--;
				v[0] = true;
			}


			if (check())
				return;

		}

	}

	private static void moveR() {

		v[N - 1] = false;
		for (int i = N - 2; i >= 0; i--) {
			if (v[i]) {
				if (uArr[i + 1] > 0 && !v[i+1]) {
					v[i] = false;
					v[i + 1] = true;
					uArr[i + 1]--;
				}
			}
		}

	}

	private static void moveC() {
		int uTmp = uArr[N - 1];
		int dTmp = dArr[0];

		// 위
		for (int i = N - 2; i >= 0; i--) {
			uArr[i + 1] = uArr[i];
			v[i+1] = v[i];
		}

		uArr[0] = dTmp;
		v[0] = false;

		// 아래
		for (int i = 1; i < N; i++) {
			dArr[i - 1] = dArr[i];
		}

		dArr[N - 1] = uTmp;
		
		

	}

	private static boolean check() {
		int cnt = 0;

		for (int i = 0; i < N; i++) {
			if (uArr[i] == 0)
				cnt++;
			if (dArr[i] == 0)
				cnt++;
		}

		if (cnt >= K)
			return true;

		return false;
	}

}

 

알고리즘 구현하는 시간은 짧았으나 문제를 이해하는데 생각보다 시간이 오래 걸림. 시뮬레이션 문제를 더 많이 풀어봐야할거같다.

 

 

'Algorithm' 카테고리의 다른 글

백준_스타트 링크_5014  (0) 2021.03.06
백준_암호 만들기_1759  (0) 2021.03.04
백준_줄 세우기_2252  (0) 2021.02.23
백준_가운데를 말해요_1655  (0) 2021.02.14
백준_부분 합_1806  (0) 2021.02.07
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/02   »
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
글 보관함