ALGORITHM/BOJ

[BOJ] 20055번 컨베이어 벨트 위의 로봇 (C++)

yegyeom 2021. 10. 22. 18:55

문제 링크 (https://www.acmicpc.net/problem/20055)

 

20055번: 컨베이어 벨트 위의 로봇

길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부

www.acmicpc.net

삼성 역량 기출문제에 있길래 알고리즘 스터디 문제로 픽한 문제...! 그냥,,,,, 구현했다 

더 보기 좋고 간결한 코드도 있는지 한 번 찾아봐야겠다!!

 

pair<int, int>를 자료형으로 갖는 벡터에 (first: 내구도 second: 로봇 존재 여부(1: 존재, 0: 존재 X))를 담아서 구현했다.

 

진행 순서는 아래와 같다.

1. 벨트가 로봇과 함께 한 칸 회전: 로봇과 함께!! 회전하는 것이므로 회전 결과 로봇이 내리는 위치에 도달하면 내려주어야 한다.

2. 로봇 이동: 가장 먼저 벨트에 올라간 로봇부터 이동해야 하는데 n번은 내리는 위치이므로 n번 ~ 2n번에는 당연히 로봇이 존재하지 않는다. 따라서 n-1번째부터 감소하며 이동시킨다. 이동 결과 로봇이 내리는 위치에 도달하면 내려준다.

3. 로봇 올리기

4. 내구도 검사: 내구도가 0인 칸의 개수가 k개가 되면 반복문 탈출

 

1번에서 내리는 위치에 도달하면 로봇 내려주는 걸 놓쳐서 자꾸 다른 답이 나왔다ㅠㅠ 문제를 잘 읽고 차분히 생각하자 제발 ~~~~~


[소스코드]


더보기

2021-10-21

Silver 1

알고리즘 분류

- 구현

- 시뮬레이션