https://www.acmicpc.net/problem/14891
구현 문제다. 톱니의 회전은 간단하게 구현이 가능하지만 문제는 회전하기 전 각 극성을 확인하여 주변 톱니바퀴를 회전해야 할지 회전하지 말아야 할지, 회전한다면 시계방향인지, 반시계 반향인지에 대해 오래 고민했던 문제다.
풀이
처음에는 재귀 호출 방식으로 구현하여 톱니가 회전하게 되면 양 측면의 톱니를 회전할지 말지를 확인 후 재귀 호출하는 방법으로 접근했었다. 하지만 그렇게 접근하게 되면 생각해야 할 조건이 너무 많아지게 된다. 따라서 톱니의 번호와 방향이 입력되면, 4개의 톱니의 회전 방향을 결정하고 난 후 한 번에 처리하는 방법으로 코드를 작성하였다.
톱니의 회전방향을 담아낼 progress: Array(repeating: 0 , count: 4) 배열을 생성한 후 해당 원소가 0이면 회전하지 않고, -1이면 반시계, 1이면 시계방향으로 회전하게 된다. 회전 방향과 톱니의 번호가 입력되면 다음과 같은 동작을 수행한다.
- 입력된 번호에 해당하는 progress 배열 원소에 입력된 방향 담기
- 입력된 번호부터 0까지 감소하면서 톱니의 맞닿은 부분의 조건 확인
- 조건이 맞다면 기존 방향을 뒤집어가며 해당 인덱스의 progess 원소에 방향 담기
- 입력된 톱니번호부터 마지막 톱니 번호까지 증가하면서 톱니의 맞닿은 부분의 조건 확인
- 조건이 맞다면 기존방향을 뒤집어가며 해당 인덱스의 progess 원소에 방향 담기
중간에 조건이 맞지 않는다면 반복문은 바로 탈출한다. 이후 마지막에 일괄로 톱니의 회전을 처리하면 된다.
정답 코드
'Problem Solving > BOJ' 카테고리의 다른 글
[14499] 주사위 굴리기 (0) | 2022.11.10 |
---|---|
[21608] 상어 초등학교 (0) | 2022.11.09 |
[13335] 트럭 (0) | 2022.11.07 |
[1245] 농장 관리 (0) | 2022.11.04 |
[1148] 단어 만들기 (0) | 2022.11.03 |