[SWEA] 10761 신뢰
예외처리 할 것들이 많아서 좀 지저분한 풀이가 되었다.
신경써줘야했던 것
- 버튼을 누르는 시점에 다른 로봇은 동작할 수 있다.
아래 부분 반복되는 곳은 함수로 처리하던가 할 수 있겠다.
나의 풀이
t = int(input()) # 테스트 케이스 수
for tc in range(1, t+1):
array = list(input().split())
num = int(array[0]) # 버튼 수
coms = array[1:] # 명령 전체
# blue와 orange 위치
b_pos = 1 # 시작점 초기화
o_pos = 1 # 시작점 초기화
# blue와 orange 명령 구분하여 저장
b_com = []
o_com = []
check = ""
for com in coms:
if com == "B" or com=="O":
check = com
else:
if check =="B":
b_com.append(int(com))
else:
o_com.append(int(com))
#뒤집어주는 이유는 스택으로 이용하기 위함
b_com.reverse()
o_com.reverse()
# 시간 누적
time = 0
# blue와 orange 목적지 초기화 (b_com 과 o_com으로부터 다음 목적지를 받아옴)
if len(b_com):
b_des = b_com.pop()
else:
b_des = 1
if len(o_com):
o_des = o_com.pop()
else:
o_des = 1
# 버튼을 누르는 명령을 기준으로 동작들 진행함
for j in range(0, len(coms), 2):
# 버튼 누르는 동작도 1초 소요
time+=1
# 버튼 누르는 명령이 B인지 O인지 확인, B면 b_pos가 coms[j+1]에 도달할 때까지 while문 동작, O면 o_pos가 com[j+1]에 도달할 때까지 동작
# while 문에서는 b_pos와 o_pos 각각이 다음 목적지(버튼)를 향해서 증감, 이미 도달했으면 움직이지 않음
# Blue/Orange가 버튼에 도착하기 전까지의 동작(while)에서 한 cycle 당 time += 1
if coms[j] == "B":
while b_pos != int(coms[j+1]):
time += 1
if b_des != b_pos:
if b_pos < b_des:
b_pos += 1
else:
b_pos -= 1
if o_des != o_pos:
if o_pos < o_des:
o_pos += 1
else:
o_pos -= 1
if len(b_com):
b_des = b_com.pop()
if o_des != o_pos:
if o_pos < o_des:
o_pos += 1
else:
o_pos -= 1
else:
while o_pos != int(coms[j+1]):
time += 1
if b_des != b_pos:
if b_pos > b_des:
b_pos -= 1
else:
b_pos += 1
if o_des != o_pos:
if o_pos > o_des:
o_pos -= 1
else:
o_pos += 1
if len(o_com):
o_des = o_com.pop()
if b_des != b_pos:
if b_pos > b_des:
b_pos -= 1
else:
b_pos += 1
print(f"#{tc}", time)