반응형
https://www.acmicpc.net/problem/20055
[ 문제풀이 ]
단순 시뮬레이션 문제이다. 주어진 조건을 순서대로 구현한다면 쉽게 정답을 맞힐 수 있을 것이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int N, K, beltSize;
static int[] belt;
static boolean[] robot;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
beltSize = N << 1;
belt = new int[beltSize];
robot = new boolean[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < beltSize; ++i) {
belt[i] = Integer.parseInt(st.nextToken());
}
int time = 0;
while (true) {
time++;
//벨트를 한 칸 회전한다. 벨트 위에 있는 로봇도 같이 움직여준다.
moveTheBelt();
//N-1부터 0까지의 벨트 위의 로봇을 이동이 가능하면 이동시켜준다.
moveTheRobot();
//0번 벨트에 로봇이 없고 내구도가 1이상이면 로봇 1개를 올려준다.
if (isValid()) {
robot[0] = true;
belt[0]--;
}
//내구도 0인 벨트가 K개 이상이면 종료한다.
if (getZeroBelt()) {
break;
}
}
System.out.println(time);
}
public static void moveTheBelt() {
//로봇을 한 칸씩 앞으로 이동
for (int i = N - 2; i >= 0; --i) {
robot[i + 1] = robot[i] ? true : false;
}
robot[0] = false;
//벨트도 한 칸씩 앞으로 이동
int temp = belt[0];
for (int i = beltSize - 1; i > 0; --i) {
belt[(i + 1) % beltSize] = belt[i];
}
belt[1] = temp;
}
public static void moveTheRobot() {
robot[N - 1] = false;
for (int i = N - 2; i >= 0; --i) {
if (robot[i] && !robot[i + 1] && belt[i + 1] >= 1) {
robot[i] = false;
robot[i + 1] = true;
belt[i + 1]--;
}
}
}
public static boolean isValid() {
return belt[0] >= 1 && !robot[0];
}
public static boolean getZeroBelt() {
int cnt = 0;
for (int i = 0; i < beltSize; ++i) {
if (belt[i] == 0) {
cnt++;
}
}
return cnt >= K;
}
}
반응형
'Problem Solving > 삼성 SW 역량 테스트 기출' 카테고리의 다른 글
백준 20057 : 마법사 상어와 토네이도 (0) | 2021.08.06 |
---|---|
백준 20058 : 마법사 상어와 파이어스톰 (0) | 2021.08.06 |
백준 19236 : 청소년 상어 (0) | 2021.08.06 |
백준 16236 : 아기 상어 (0) | 2021.08.06 |
백준 20061 : 모노미노도미노 2 (0) | 2021.08.03 |
댓글