시뮬레이션이 짜증나는건,
분명 풀 수 있는데,
너무하기 귀찮다는 것 같다.
# 톱니바퀴의 정보를 담아 줄 리스트
gears = [0, [], [], [], []]
# 톱니바퀴 입력
for i in range(1, 5):
gear = input()
for j in gear:
gears[i].append(int(j))
# 함수들
# is_connected(gear_front, gear_back)
def is_connected(gear_front, gear_back):
return gears[gear_front][6] != gears[gear_back][2]
# cw(gear)
def cw(gear):
# 전역 변수 선언
global gears
# temp
temp = gears[gear][-1]
# 돌려주기
for i in range(7, 0, -1):
gears[gear][i] = gears[gear][i-1]
gears[gear][0] = temp
# ccw(gear)
def ccw(gear):
# 전역 변수 선언
global gears
# temp
temp = gears[gear][0]
# 돌려주기
for i in range(7):
gears[gear][i] = gears[gear][i+1]
gears[gear][-1] = temp
# k 입력
k = int(input())
for _ in range(k):
# 회전할 톱니바퀴와 방향을 입력
gear_num, dir = map(int, input().split())
# 이번 턴에 회전시킬 톱니바퀴 번호와 방향을 담아 줄 리스트
gears_about_to_change = [(gear_num, dir)]
# gear 인덱싱용
curr_gear_idx = gear_num
# 현재 방향
curr_gear_dir = dir
# 왼쪽으로 이어져 있는 톱니바퀴 확인
while True:
# curr_idx가 1이거나 연결되어 있지 않으면,
if curr_gear_idx == 1 or not is_connected(curr_gear_idx, curr_gear_idx - 1):
# 반복문 종료,
break
# 이어져 있다면,
elif is_connected(curr_gear_idx, curr_gear_idx - 1):
# curr_gear_idx 와 curr_gear_dir 바꿔주고
curr_gear_idx, curr_gear_dir = curr_gear_idx - 1, curr_gear_dir * -1
# 회전시킬 톱니바퀴 리스트에 넣어주기
gears_about_to_change.append((curr_gear_idx, curr_gear_dir))
# gear 인덱스 초기화
curr_gear_idx = gear_num
# 현재 방향 초기화
curr_gear_dir = dir
# 오른쪽으로 이어져 있는 톱니바퀴 확인
while True:
# curr_idx가 4이거나 연결되어 있지 않으면,
if curr_gear_idx == 4 or not is_connected(curr_gear_idx + 1, curr_gear_idx):
# 반복문 종료
break
# 이어져 있다면,
elif is_connected(curr_gear_idx + 1, curr_gear_idx):
# curr_gear_idx 와 curr_gear_dir 바꿔주고
curr_gear_idx, curr_gear_dir = curr_gear_idx + 1, curr_gear_dir * -1
# 회전시킬 톱니바퀴 리스트에 넣어주기
gears_about_to_change.append((curr_gear_idx, curr_gear_dir))
# 회전시켜주기
for change in gears_about_to_change:
# 돌려줄 기어와 방향을 언팩킹
change_gear, change_dir = change
# 시계방향이라면,
if change_dir == 1:
# 시계방향으로 돌려주기
cw(change_gear)
# 반시계방향이라면,
else:
# 반시계뱡향으로 돌려주기
ccw(change_gear)
# 점수 계산
point = 0
if gears[1][0]:
point += 1
if gears[2][0]:
point += 2
if gears[3][0]:
point += 4
if gears[4][0]:
point += 8
# 출력
print(point)
'Algorithm(BOJ, Python) > Simulation' 카테고리의 다른 글
[백준_20055] 컨베이어 벨트 위의 로봇 python (1) | 2022.09.21 |
---|---|
[백준_15662] 톱니바퀴2 python (0) | 2022.09.18 |
[백준_2174] 로봇 시뮬레이션 python (2) | 2022.09.16 |
[백준_14499] 주사위굴리기 python (0) | 2022.09.04 |
[백준_14503] 로봇청소기 python (0) | 2022.08.28 |