Algorithm

Baekjoon 백준 알고리즘 - 거북이 ( 8911 )

jssvs 2022. 3. 13. 21:45
반응형

1.문제 소개

  • 구현, 시뮬레이션 유형 문제에 해당한다.

https://www.acmicpc.net/problem/8911

2. 코드

import sys
input = sys.stdin.readline

def set_test_case():
    command_line = int(input())
    commands=[]
    for i in range(0,command_line):
        commands+=[input()]

    return commands

def move_turtle(location,direction,move):
    # location[0] -> X 축 location[1] -> Y 축
    if direction ==3 or direction ==2:
        move = move * -1
        
    if direction == 0 or direction ==2:
        location[1] = location[1] + move
    elif direction == 1 or direction == 3:
        location[0] = location[0] + move
    else:
        pass

    return location

def move_direction(current, direction):
    # 0 : up , 1 : right , 2 : down , 3: left
    if direction == 'R':
        current = (current+1)%4
    elif direction == 'L':
        current = (current-1)%4
    else:
        pass
    return current

def solution():
    commands = set_test_case()
    
    for command in commands:
        turtle_direction = 0 # default direction -> UP
        turtle_location=[0,0] # default location
        maximum_location=[0,0,0,0] # UP , RIGHT, DOWN, LEFT 
        
        for c in command:

            # set location by command
            if c == 'L' or c=='R':
                turtle_direction = move_direction(turtle_direction,c)
            elif c == 'F':
                turtle_location = move_turtle(turtle_location,turtle_direction,1)
            elif c == 'B':
                turtle_location = move_turtle(turtle_location,turtle_direction,-1)
            
           # save maximum location of turtle  
            if c == 'F' or c == 'B':
                if turtle_location[0] > maximum_location[1]:
                    maximum_location[1]=turtle_location[0]                    
                    
                elif turtle_location[1] > maximum_location[0]:
                    maximum_location[0]=turtle_location[1]
                    
                elif turtle_location[0] < maximum_location[3]:
                    maximum_location[3] = turtle_location[0]
                
                elif turtle_location[1] < maximum_location[2]:
                    maximum_location[2] = turtle_location[1]
            
        # result print
        if (maximum_location[1] == 0 and maximum_location[3] ==0) or (maximum_location[0] == 0 and maximum_location[2] ==0): 
            print(0)
        else:
            print((abs(maximum_location[0])+abs(maximum_location[2])) * (abs(maximum_location[1])+abs(maximum_location[3])))
            

if __name__=='__main__':
    solution()

3. 코멘트

  • IF 문이 많아 좋은 코드로 만들진 못했지만, 요약하자면 move_direction,turtle 로 거북이의 방향과 위치를 명령어기반으로 갱신해주고, 동서남북 방면의 최대값을 저장해 정답을 출력했다.
  • 최근 폼도 떨어지기도 했고, 매트릭스 좌표 계산이 머릿속으로 빨리 빨리 안되서 속상했다.
  • 다른 스터디원의 풀이 방식을 보니, 내 로직이 쓸데없이 더 복잡해보였지만.. 뭐어쩌겠나.. ㅇㅅㅇ.. 공부해야지. 
반응형