https://www.acmicpc.net/problem/20055
20055번: 컨베이어 벨트 위의 로봇
길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부
www.acmicpc.net
골드5
구현 방법
구현 문제라서 문제에 적힌대로 코드 작성하면 된다. 딱히 사용한 자료구조나 알고리즘도 없다.
- 2 ≤ N ≤ 100
- 1 ≤ K ≤ 2N
- 1 ≤ Ai ≤ 1,000
조건도 위와 같아서 O(n^2)도 충분히 가능하다.
주의할 점은 로봇 위치 이동에 따라 로봇 올리는 곳과 로봇 내리는 곳 신경써서 구현해야 한다.
코드
package boj;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.StringTokenizer;
/**
* 백준 20055
* 컨베이어 벨트 위의 로봇
* 골드 5
* https://www.acmicpc.net/problem/20055
*/
public class Boj20055 {
public static void main (String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int[] a = new int[n * 2];
Boolean[] location = new Boolean[n];
Arrays.fill(location, false);
st = new StringTokenizer(br.readLine());
for(int i = 0; i < n * 2; i++) {
a[i] = Integer.parseInt(st.nextToken());
}
int answer = 0;
while(true) {
answer++;
int temp = a[2 * n - 1];
//벨트 이동
for(int i = 2 * n - 1; i > 0; i--) {
a[i] = a[i - 1];
}
a[0] = temp;
//벨트 이동에 따른 로봇 위치 이동
for(int i = n - 1; i > 0; i--) {
location[i] = location[i - 1];
}
location[0] = false;
//내리는 곳에서 로봇 내리기
location[n - 1] = false;
//로봇 이동
for (int i = n -1; i > 0; i--) {
if(location[i - 1] && !location[i]) {
if(a[i] > 0) {
a[i]--;
location[i] = true;
location[i - 1] = false;
}
}
}
//로봇 올리기
if(!location[0] && a[0] > 0) {
location[0] = true;
a[0]--;
}
//로봇 내리기
if (location[n -1]) {
location[n - 1] = false;
}
int cnt = 0;
for(int i = 0; i < 2 * n; i++) {
if(a[i] == 0)
cnt++;
}
//종료 조건 확인
if(cnt >= k)
break;
}
System.out.println(answer);
}
}

느낀 점
골드5라고 쫄지 말고 하면 된다!
'알고리즘' 카테고리의 다른 글
자바 - 프로그래머스 / 연속된 부분 수열의 합 (0) | 2023.04.24 |
---|---|
자바 - 프로그래머스 / 행렬 테두리 회전하기 (0) | 2023.04.21 |
자바 - 프로그래머스 / 추억 점수 (0) | 2023.04.18 |
자바 - 프로그래머스 / 달리기 경주 (0) | 2023.04.17 |
자바 - 백준 12101 / 1, 2, 3 더하기 2 (0) | 2023.04.10 |