코딩테스트 Python 알고리즘 (공원 산책)

2024. 11. 6. 11:08·Daily 코드카타/Python 알고리즘

문제

코딩테스트 연습 - 공원 산책 | 프로그래머스 스쿨

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

지나다니는 길을 'O', 장애물을 'X'로 나타낸 직사각형 격자 모양의 공원에서 로봇 강아지가 산책을 하려합니다. 
산책은 로봇 강아지에 미리 입력된 명령에 따라 진행하며, 명령은 다음과 같은 형식으로 주어집니다.

["방향 거리", "방향 거리" … ]
예를 들어 "E 5"는 로봇 강아지가 현재 위치에서 동쪽으로 5칸 이동했다는 의미입니다. 
로봇 강아지는 명령을 수행하기 전에 다음 두 가지를 먼저 확인합니다.

주어진 방향으로 이동할 때 공원을 벗어나는지 확인합니다.
주어진 방향으로 이동 중 장애물을 만나는지 확인합니다.
위 두 가지중 어느 하나라도 해당된다면, 로봇 강아지는 해당 명령을 무시하고 다음 명령을 수행합니다.
공원의 가로 길이가 W, 세로 길이가 H라고 할 때, 공원의 좌측 상단의 좌표는 (0, 0), 
우측 하단의 좌표는 (H - 1, W - 1) 입니다.

 

 


코드 및 해설

파이썬 알고리즘 같은 경우는 나도 해설을 보면서 이해하면서 코드를 짰기 때문에 풀이를 사실 할 수가 없다.

 

한줄씩 풀어서 설명 해 보겠다.

 

h = len(park)
w = len(park[0])

 

우선 전체 공원의 높이와 너비를 h,w로 설정한다.

이때 park의 갯수는 높이이며,  park[0] 즉 한개의 park값안에 들어있는 데이터의 수를 너비로 설정한다.

 

 

 

x, y = next((i, j) for i, row in enumerate(park) for j, char in enumerate(row) if char == 'S')

 

x와  y의 값을 각각 i 와 j로 하는데, 

i는 park의 행을 확인하고, j는 모든 열을 확인하는데 이때

S를 찾을때의 그 좌표값을 i와 j 에 할당한다. 즉 x, y는 시작지점의 좌표가 된다.

 

 

 

directions = {'N': (-1, 0), 'S': (1, 0), 'W': (0, -1), 'E': (0, 1)}

 

방향의 기본적인 진행을 설정한다. 키가 위치 값은 그 키에 맞는 진행이다.

N은 즉 North 북쪽이기 때문에 x의 값을 -1함으로써 설명할 수 있다. 다들 이런 식이다.

 

 

 

for route in routes:
        d,n = route.split()
        dx,dy = directions[d]
        nx,ny = x,y

 

routes에서 route 를 꺼내 올때마다 반복을 시킨다.

d와 n 을 각각 방향과 거리로 나눈다. 

이때 위의 설정된 방향에 맞는 딕셔너리의 키와 값을 불러온다.

즉 dx, dy는 현재 방향에 대한 좌표값인 것이다.

nx, ny를 현재 위치로 초기화를 시킨다.

 

 

 

for _ in range(int(n)):
    nx += dx
    ny += dy

    if not (0 <= nx <h and 0 <= ny < w) or park[nx][ny] == 'X':
        break
else:
    x,y = nx, ny

 

n의 값에 따라서 그만큼 반복을 한다.

초기화된 nx와 ny에 dx와 dy를 더한다. 즉 현재 위치에서 해당 방향만큼 1 이동한 것이다.

이때, nx와 ny의 값이 공원을 넘지 않았는지 또는 park [nx] [ny] 를 사용해서 현재 위치에 X 즉 장애물 의 유무또한 확인하여 반복을 종료한다.

반복이 종료되지않고 끝난다면, nx 와 ny를 현재의 위치로 설정한다. 

 

현재 좌표를 반환하고 끝을 낸다.

 

 

 

아래는 완성된 코드이다.

def solution(park, routes):
    h = len(park)
    w = len(park[0])
    
    x, y = next((i, j) for i, row in enumerate(park) for j, char in enumerate(row) if char == 'S')
    
    directions = {'N': (-1, 0), 'S': (1, 0), 'W': (0, -1), 'E': (0, 1)}
    
    for route in routes:
        d,n = route.split()
        dx,dy = directions[d]
        nx,ny = x,y
        
        for _ in range(int(n)):
            nx += dx
            ny += dy
            
            if not (0 <= nx <h and 0 <= ny < w) or park[nx][ny] == 'X':
                break
        else:
            x,y = nx, ny
    
    return [x,y]

 

 


링크

Programmers/프로그래머스/1/172928. 공원 산책 at main · K-MarkLee/Programmers

 

Programmers/프로그래머스/1/172928. 공원 산책 at main · K-MarkLee/Programmers

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - K-MarkLee/Programmers

github.com

 

 

저작자표시 비영리 변경금지 (새창열림)

'Daily 코드카타 > Python 알고리즘' 카테고리의 다른 글

코딩테스트 Python 알고리즘 (N개의 최소공배수)  (2) 2024.11.14
코딩테스트 Python 알고리즘 (예상 대진표)  (0) 2024.11.13
코딩테스트 Python 알고리즘 (카펫)  (0) 2024.11.12
코딩테스트 Python 알고리즘 (피보나치 수)  (0) 2024.11.11
코딩테스트 Python 알고리즘  (1) 2024.11.05
'Daily 코드카타/Python 알고리즘' 카테고리의 다른 글
  • 코딩테스트 Python 알고리즘 (예상 대진표)
  • 코딩테스트 Python 알고리즘 (카펫)
  • 코딩테스트 Python 알고리즘 (피보나치 수)
  • 코딩테스트 Python 알고리즘
코드 유랑자 승열
코드 유랑자 승열
코드 유랑자 승열의 프로그래밍 일지를 남기는 공간입니다.
  • 코드 유랑자 승열
    승열의 프로그래밍 시네마
    코드 유랑자 승열
  • 전체
    오늘
    어제
  • 링크

    • 깃허브 보러가기
    • 링크드인 보러가기
    • 인스타그램 보러가기
    • 카테고리
      • 코딩테스트
        • BaekJoon
      • TIL and WIL
        • TIL
        • WIL
      • 주말스터디
      • 내일배움캠프
        • 사전캠프 강의 (SQL)
      • 용어정리
        • Python
        • Python-Library
        • Machine-Learning
        • Deep-Learning
        • AI 활용
        • LLM & RAG
        • Docker
        • Django
        • SQL
        • Java Script
        • etc
      • Daily 코드카타
        • SQL
        • Python 알고리즘
      • 임시저장
      • 보류
  • 태그

    template
    View
    RAG
    word2vec
    티스토리챌린지
    llm
    langchain
    오블완
    django
    vector db
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
코드 유랑자 승열
코딩테스트 Python 알고리즘 (공원 산책)
상단으로

티스토리툴바