https://www.acmicpc.net/problem/14891
14891번: 톱니바퀴
첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터
www.acmicpc.net
문제 해결을 위한 과정
이 문제의 경우 역시 마찬가지로 구현 문제이므로 차분하게 조건을 작성하면 해결할 수 있었다. 돌리게 되는 톱니를 기준으로 좌측 영역, 우측 영역을 분리하여 각자 맞게 회전을 시켜주었다. 다만 이때 flagLeft(왼쪽에 맞물리는 부분) flagRight(우측에 맞물리는 부분)을 for문 내부에 그대로 넣어서 덮어진 값을 사용하게 되어 틀렸습니다. 를 받게 되었다. 따라서 tempFlagLeft, tempFlagRight로 분리하여 덮어씌워짐을 방지 하였다.
소스코드
arr = [[] for _ in range(4)]
for i in range(4):
tempArr = input()
for j in range(len(tempArr)):
arr[i].append(int(tempArr[j]))
k = int(input())
moves = []
for _ in range(k):
a, b = map(int, input().split())
moves.append((a, b))
def turn_right(array):
right = array[7]
for i in range(6, -1, -1):
array[i + 1] = array[i]
array[0] = right
def turn_left(array):
left = array[0]
for i in range(0, 7):
array[i] = array[i + 1]
array[7] = left
for x in range(k):
num, dir = moves[x]
num -= 1 # index 맞추기 위함
flagLeft = arr[num][6]
flagRight = arr[num][2]
if dir == 1:
turn_right(arr[num])
else:
turn_left(arr[num])
tempDir = dir
tempFlagLeft = flagLeft
tempFlagRight = flagRight
for i in range(num-1, -1, -1):
if tempFlagLeft != arr[i][2]:
if tempDir == 1:
tempFlagLeft = arr[i][6]
tempFlagRight = arr[i][2]
turn_left(arr[i])
tempDir *= -1
else:
tempFlagLeft = arr[i][6]
tempFlagRight = arr[i][2]
turn_right(arr[i])
tempDir *= -1
else:
break
tempDir = dir
tempFlagLeft = flagLeft
tempFlagRight = flagRight
for i in range(num + 1, 4):
if tempFlagRight != arr[i][6]:
if tempDir == -1:
tempFlagLeft = arr[i][6]
tempFlagRight = arr[i][2]
turn_right(arr[i])
tempDir *= -1
else:
tempFlagLeft = arr[i][6]
tempFlagRight = arr[i][2]
turn_left(arr[i])
tempDir *= -1
else:
break
ans = 0
for i in range(len(arr)):
if arr[i][0] == 1:
if i == 0:
ans += 1
elif i == 1:
ans += 2
elif i == 2:
ans += 4
else:
ans += 8
print(ans)
'알고리즘 > 백준' 카테고리의 다른 글
백준 20055번: 컨베이어 벨트 위의 로봇(Python) (0) | 2024.04.08 |
---|---|
백준 9663번: N-Queen(Python) (0) | 2024.04.06 |
백준 21608번: 상어 초등학교(Python) (0) | 2024.04.03 |
백준 21610번: 마법사 상어와 비바라기(Python) (0) | 2024.04.02 |
백준 1238번: 파티(Python, cpp) (0) | 2022.02.27 |