[SWEA] 10761 신뢰

[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)

© 2021. All rights reserved.