문제
https://www.acmicpc.net/problem/14891
14891번: 톱니바퀴
첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터
www.acmicpc.net
풀이
python3
def checkLeft(gearNum, dir, gearList):
if gearNum <= 0 or gearList[gearNum][6] == gearList[gearNum - 1][2]:
return
checkLeft(gearNum - 1, -dir, gearList)
gearList[gearNum-1] = rotate(gearList[gearNum-1], dir)
def checkRight(gearNum, dir, gearList):
if gearNum >= 3 or gearList[gearNum][2] == gearList[gearNum + 1][6]:
return
checkRight(gearNum + 1, -dir, gearList)
gearList[gearNum+1] = rotate(gearList[gearNum+1], dir)
def rotate(r_list, dir):
return r_list[-dir:] + r_list[:-dir]
if __name__ == "__main__":
gearList = list()
for i in range(4):
row = list(map(str, input().split()))
gearList.append(list(row[0]))
n = int(input())
for i in range(n):
gearNum, dir = map(int, input().split())
checkLeft(gearNum - 1, -dir, gearList)
checkRight(gearNum - 1, -dir, gearList)
gearList[gearNum - 1] = rotate(gearList[gearNum - 1], dir)
result = 0
for i in range(4):
result += (2**i) * int(gearList[i][0])
print(result)
아쉬웠던점
처음 gearList 인서트 받는 부분에서, int 로 받으면 00000010의 경우 10만 인서트되는 이슈가 있었다.
GearNum은 1,2,3,4 이지만, GearList의 인덱스는 0부터 시작하는 부분을 간과해서 어려웠다.
rotate 부분을 구현하는 방법에 대해서 생각했다...
'algorithm > exercise' 카테고리의 다른 글
[BOJ 2638] 백준 2638 치즈 (0) | 2021.08.28 |
---|---|
[BOJ 6593] 백준 6593 상범 빌딩 (0) | 2021.08.28 |
[BOJ 1937] 백준 1937 욕심쟁이 판다 (0) | 2021.08.19 |
[BOJ 2650] 백준 2650 색종이 만들기 (0) | 2021.07.30 |
[programmers] 기능개발 with JAVA (0) | 2021.07.29 |