티스토리 뷰
반응형
문제 링크
https://www.acmicpc.net/problem/20055
20055번: 컨베이어 벨트 위의 로봇
길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부
www.acmicpc.net
문제 풀이
시뮬레이션 문제이다. 시뮬레이션 문제는 요구하는 바를 정확히 이해하고, 중요한 조건을 캐치해서 그대로 구현해내기만 하면되는 문제이다. (근데 엄한데서 조건을 빼먹어서 한참 찾았다. ㅠㅠ)
소스 코드
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class P20055 {
static Queue<Integer> robots;
static int [] belt ;
static int N,K;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
K = sc.nextInt();
belt = new int [N*2];
for (int i = 0; i < belt.length; i++) {
belt[i] = sc.nextInt();
}
//로봇위치는 큐
robots = new LinkedList<>();
int cnt =0;
while(true) {
cnt++;
//회전
rotate();
//이동
move();
//로봇 올림
put();
//내구도 체크
if(checkEnd()) break;
}
System.out.println(cnt);
}
public static void rotate() {
// belt 회전
int temp = belt[belt.length-1];
for (int i = belt.length-1; i >0; i--) {
belt[i] = belt[i-1];
}
belt[0] = temp;
//로봇 회전
int size = robots.size();
while(size-->0) {
int robot = robots.poll()+1;
if(robot != N-1) robots.add(robot);
}
}
public static void move() {
//로봇 무브
int size = robots.size();
while(size-->0) {
//뽑기
int robot = robots.poll();
if(isExistRobot(robot+1) || belt[robot+1]<=0) {
robots.add(robot);
}else {
belt[robot+1]--;
if(robot+1 != N-1) robots.add(robot+1);
}
}
}
public static boolean isExistRobot(int robot) {
for (int i : robots) {
if(robot == i) return true;
}
return false;
}
public static void put() {
if(belt[0]>=1) {
robots.add(0);
belt[0]--;
}
}
public static boolean checkEnd() {
int cnt = 0;
for (int i : belt) {
if(i<=0) cnt++;
}
return cnt>=K ? true: false;
}
}
반응형
'Problem Solving' 카테고리의 다른 글
[ 프로그래머스 / Java] 프린터 (0) | 2021.07.27 |
---|---|
[ 프로그래머스 / Java] 기능개발 (0) | 2021.07.26 |
[ 백준 17281 ] ⚾ 야구 - Java 시간초과 (0) | 2021.07.22 |
[ 백준 1260 ] DFS 와 BFS - JAVA (0) | 2021.04.02 |
[ 프로그래머스 / Java] 신규 아이디 추천 (1) | 2021.03.31 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- DP
- java
- 커링
- 키패드 누르기
- 삼성기출
- 1629
- 19236
- 문자열 압축
- spring cache
- 삼각달팽이
- 39회차
- 카카오 코딩 테스트
- for of
- 카카오 인턴십
- javascript
- 오버로딩
- 삼성 코테
- 백준
- RGB거리
- 청소년상어
- 제네릭 타입
- 제네릭(Generic)
- vaild
- 프로그래머스
- 반례
- yyyy-MM-dd
- 날짜 유효성
- 01타일
- 가장 큰 수
- local cache
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
글 보관함