반응형
◎ 문제풀이
문제이해력과 구현력이 필요한 문제였다.
자료구조는 2개를 만들어 준다.
1) 컨베이어 벨트 ( int 배열 , 내구도 )
2) 로봇위치 ( boolean 배열, 로봇 존재 여부 )
문제에 주어진 단계에 따라 차근히 구현하면 된다.
1) 벨트 이동하기
벨트가 한 칸 움직일때마다, 우측으로 값을 복사한다. 맨끝은 가장 처음으로 복사한다.
벨트 자료구조를 우측으로 값을 복사하였다. 벨트 위에 있는 로봇도 함께 우측으로 이동한다.
2) 로봇 이동하기
이제는 벨트와 별개로 로봇이 스스로 이동해야 한다.
로봇의 우측이동은 조건이 있다.
1) 벨트의 내구도가 1 이상이어야 한다.
2) 이동할 벨트에 로봇이 없어야 이동이 가능하다.
조건에 부합한 경우에만 우측으로 값을 복사한다.
3) 로봇 올려놓기
이동이 완료되면 로봇을 올려놓는다.
벨트의 자료구조의 인덱스0 자리의 내구도가 1이상이고 로봇이 없으면 로봇을 올려놓는다.
4) 벨트 내구성 체크하기
벨트의 내구성이 0인 칸이 k개 이상이면 회전을 멈춘다. 반복문으로 개수를 카운트한다.
◎ 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
//BOJ20055 컨베이어 벨트 위의 로봇
public class Main {
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[] belt = new int[2*n];
boolean[] robot = new boolean[n];
st = new StringTokenizer(br.readLine());
for(int i=0;i<2*n;i++){
belt[i] = Integer.parseInt(st.nextToken());
}
int ans = 1;
while(true){
//1. 벨트 이동하기
int tmp = belt[belt.length-1];
for(int i=belt.length-1;i>0;i--){
belt[i] = belt[i-1];
}
belt[0] = tmp;
// 벨트가 이동하면 벨트 위에 있는 로봇도 함께 움직인다.
for(int i=robot.length-1;i>0;i--){
robot[i]=robot[i-1];
}
robot[0] = false;
// 2. 로봇 이동하기
robot[robot.length-1] = false; //내리는 지점에 로봇 내리기
for(int i=robot.length-1;i>0;i--){
if(robot[i-1]&& !robot[i] && belt[i]!=0){
robot[i] = true; // 로봇 이동 : true
robot[i-1] = false; // 로봇 떠남 : false
belt[i]--; // 이동한 칸 내구도 감소 : -1
}
}
//3. 로봇 올리기 ( 인덱스 0 )
if(belt[0] != 0){
robot[0] = true;
belt[0]--;
}
//4. 벨트 내구성 체크하기
int count = 0;
for(int i=0;i<belt.length;i++){
if(belt[i] == 0) count++;
}
if(count >= k) break;
else ans++;
}
// 답 출력
System.out.println(ans);
}
}
반응형
'문제풀이 > Implementation' 카테고리의 다른 글
[PS] BOJ18111 마인크래프트 ( 구현 ) with JAVA (0) | 2024.01.16 |
---|---|
[PS] Programmers - k진수에서 소수 개수 구하기 (1) | 2024.01.15 |
[PS] Programmers - 신고 결과 받기 with JAVA (0) | 2024.01.15 |
[CodingTest] 게임 개발 ( 구현 ) (0) | 2023.05.26 |
[CodingTest] 왕실의 나이트 ( 구현 ) (0) | 2023.05.26 |