[백준] 13567번: 로봇 (구현, 파이썬)

2024. 10. 15. 20:34·코딩테스트/BOJ

📌 문제 조건

TURN 0: 왼쪽으로 90도 방향을 바꾼다. 

TURN 1: 오른쪽으로 90도 방향을 바꾼다. 

MOVE d: d만큼 현재 방향에서 직진한다.

시작 위치는 (0, 0), 초기 방향은 (+1, 0)이다!

 

▷ 출력: 만약, 정사각형 영역을 벗어난다면 -1을 출력하고, 벗어나지 않는다면 현재의 좌표를 출력한다. 

문제의 조건 중에서 칸 안에 정보를 얻는 것이 아니므로 (x, y) 값 자체에서 연산해도 무방하다!

📌 구해야 하는 정답

   로봇이 (0,0)이 n번의 명령을 수행하며 마지막에 위치하는 좌표를 구해야 한다. 

📌 풀이 하기

  • 동작 조건은 MOVE와 TURN 2가지이다. 동작 각각에 대한 함수를 정의하여 해도 되지만, 바로바로 위치와 방향이 업데이트 되어야하고, 동작이 간단하므로 함수로 정의하지 않았다. 
  • 정사각형 S를 벗어나는 경우 처리를 고려해야한다. 
  • 최종 위치가 벗어났을 때 -1로 처리해줄 뿐만 아니라 MOVE 중에 벗어난다면, -1로 처리해줘야한다. 
  • TURN: 방향 전환 시에는 시계, 반시계로 순차적으로 변환하므로 ARR = (1, 0), (0, 1), (-1, 0), (0, -1) 움직이는 순서를 고정하면 편하다. 0일때는 인덱스를 1씩 증가하고, 1일 경우에는 1씩 감소하면된다. 

📌 코드 설계하기

1. 입력으로 M(정사각형의 한 변)과 n 시도 횟수를 input으로 받는다

2. 변화하는 값은 X, Y좌표와 방향 인덱스 i를 0으로 초기화한다.

3. DX, DY에 d값을 곱해 move한다.

4. 만약, 범위를 벗어나면 -1, 반복문을 빠져나간다.

5. 방향 전환시에 각 0, 1에 따라 인덱스를 증감시켜준다. 

📌 시도 회차 수정 사항

  • indexError: i는 0에서 3 사이의 값을 가져야 하는데 i += 1, i -= 1을 수행할 때, 범위를 벗어났다.
  • 아래와 같이 나타내주면, 항상 0 ~ 3 사이에서 순환할 수 있다.  
        if mode == 0:
            i = (i + 1) % 4  # 방향 인덱스를 0~3 사이로 순환
        else:
            i = (i - 1) % 4  # 방향 인덱스를 0~3 사이로 순환

📌 정답 코드

import sys
input = sys.stdin.readline

M, n = map(int, input().split())
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]
x, y, i = 0, 0, 0
flag = 0
for _ in range(n):
    order = list(input().split())
    if order[0] == "MOVE":
        d = int(order[1])
        x += (dx[i] * d)
        y += (dy[i] * d)
        if x < 0 or x > M or y < 0 or y > M:
            flag = -1
            break
        else:
            continue
    else: # TURN 일 때
        mode = int(order[1])
        if mode == 0:
            i = (i + 1) % 4
        else:
            i = (i - 1) % 4

if flag == -1:
    print(-1)
else:
    print(x, y)

📌 추가 놓친 부분

1. 입력 받을때 order로 배열로 입력받아서 order[0], order[1] 이렇게 했었는데 차라리 type, count = input().split()으로 표현하면 됐었다.

2. 

'코딩테스트 > BOJ' 카테고리의 다른 글

[백준] 17266번: 어두운 굴다리 (이분탐색, 파이썬)  (0) 2024.10.19
[백준] 2503번: 숫자 야구 (구현, 파이썬)  (1) 2024.10.16
[백준] 2096: 내려가기 (DP, 파이썬)  (0) 2024.10.14
[백준] 14430: 자원 캐기 (파이썬)  (0) 2024.10.12
[백준] 10026: 적록색약  (0) 2024.10.10
'코딩테스트/BOJ' 카테고리의 다른 글
  • [백준] 17266번: 어두운 굴다리 (이분탐색, 파이썬)
  • [백준] 2503번: 숫자 야구 (구현, 파이썬)
  • [백준] 2096: 내려가기 (DP, 파이썬)
  • [백준] 14430: 자원 캐기 (파이썬)
뚱이, not a starfish
뚱이, not a starfish
M.S. Student,. Mainly interested in computer vision and autonomous cars
  • 뚱이, not a starfish
    Wilbur-Babo
    뚱이, not a starfish
  • 전체
    오늘
    어제
    • 분류 전체보기 (194)
      • 통신 및 네트워크 (12)
      • Embedded Projects (2)
      • 3D Reconstruction (1)
        • Gaussian Splatting (0)
        • 3D-GS (1)
        • Multi-view Geometry (0)
        • VSLAM (0)
        • Computer Graphics (0)
      • LLM(VLM) (0)
      • AI-Study (28)
        • Mono-Depth (7)
        • Base (2)
        • Computer Vision (1)
        • Image Processing (3)
        • Tiny Object Detection (3)
      • 자율주행 (20)
        • [2023] 1-fifth AA EV (4)
        • [2022] 1-tenth AA EV (2)
        • ROS 1,2 (4)
        • 이론 (7)
        • 실습 (3)
      • Pointcloud (0)
      • sw (16)
        • 정보보안 (1)
        • Android_develop (3)
      • [학부] 전기전자공학 (12)
        • 반도체 (2)
        • 마이크로프로세서 (6)
      • 코딩테스트 (22)
        • BOJ (21)
      • 취준 (21)
        • EVS37 Ambassador (5)
        • 차량 제어 플랫폼 (5)
        • 영어 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    심포지움
    헤네스유아용자동차
    tar압축풀기
    현차 자율주행
    자율주행
    software defined vehicle
    오픽후기
    현대자동차 서류합격후기
    현대자동차 자율주행 서류 합격 후기
    현차떨
    현대자동차 자율주행
    현대자동차최종불합
    오블완챌린지
    현차 3월 신입 서류
    현대차3월신입후기
    자율주행경진대회
    evs37 sdv
    헤네스
    현대자동차최종면접결과
    tar 파일
    자율주행자동차
    현차 3월 자율주행
    rc카
    정렬
    evs37sdv
    현대자동차 연구개발
    자율주행시험
    자율주행작품
    우분투터미널
    EVS37
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
뚱이, not a starfish
[백준] 13567번: 로봇 (구현, 파이썬)
상단으로

티스토리툴바