[프로그래머스|파이썬] 공원 산책 (연습문제/level 1)

2023. 4. 28. 00:53·Problem Solving/프로그래머스
반응형
문제

https://school.programmers.co.kr/learn/courses/30/lessons/172928

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

🐍파이썬
def solution(park, routes):
    answer = [0, 0]
    n = len(park)   #세로
    m = len(park[0])    #가로
    for i in range(n):
        for j in range(m):
            if park[i][j] == "S":	#start에서 시작
                answer[0] = i   #y축
                answer[1] = j   #x축
                break
    for k in routes:
        a, b = k.split()	#a=방향, b=이동한 거리
        b = int(b)
        flag = False	#경로에 X가 있는지 확인하는 플래그
        if a == "E":    #동쪽으로(x축)
            if answer[1]+b >= m:	#인덱스 범위를 넘어선 경우 아래 코드 실행x
                continue
            for i in range(1, b+1):	#한칸씩 이동하며 가는 길에 X가 있는지 확인
                if park[answer[0]][answer[1]+i] == "X":	#x축으로만 이동(y축 고정)
                    flag = True	#경로 상 X가 존재한다
                    break	#종료
            if flag == True:	#경로 상 X가 존재한다면 아래 코드 실행x(이동x)
                continue
            answer[1] += b	#현재 위치 업데이트
        elif a == "W":  #서쪽으로(x축)
            if answer[1]-b < 0:
                continue
            for i in range(1, b+1):
                if park[answer[0]][answer[1]-i] == "X":
                    flag = True
                    break
            if flag == True:
                continue
            answer[1] -= b
        elif a == "S":  #남쪽으로(y축)
            if answer[0]+b >= n:
                continue
            for i in range(1, b+1):
                if park[answer[0]+i][answer[1]] == "X":	#y축으로만 이동(x축 고정)
                    flag = True
                    break
            if flag == True:
                continue
            answer[0] += b
        elif a == "N":  #북쪽으로(y축)
            if answer[0]-b < 0:
                continue
            for i in range(1, b+1):
                if park[answer[0]-i][answer[1]] == "X":
                    flag = True
                    break
            if flag == True:
                continue
            answer[0] -= b
    return answer

동서남북으로 갔을 때 일어나는 일들을 모두 구현해 주었다.

더보기

n칸 뒤가 X이면 이동하지 않는 게 조건인 줄 알았는데 다시 보니 이동 경로에 X가 존재하면 이동하지 않는 거였다... 이것 때문에 시간을 엄청 낭비했다. 문제를 잘 읽고 풀자.😭

 

 

다른 풀이 방법

class Dog:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.g = {"N": (-1, 0), "W": (0, -1), "E": (0, 1), "S": (1, 0)}

    def move(self, park, direction, distance):
        i, j = self.g[direction]
        x, y = self.x + (i * distance), self.y + (j * distance)
        if x < 0 or y < 0 or x >= len(park) or y >= len(park[0]):
            return park
        elif "X" in park[x][min(self.y, y) : max(self.y, y) + 1] or "X" in [
            row[y] for row in park[min(self.x, x) : max(self.x, x)]
        ]:
            return park
        park[self.x][self.y] = "O"
        park[x][y] = "S"
        self.x = x
        self.y = y
        return park

    @classmethod
    def detect_start_dogs_location(self, park):
        for i, row in enumerate(park):
            for j, item in enumerate(row):
                if item == "S":
                    return i, j


def solution(park, routes):
    park = [list(row) for row in park]
    x, y = Dog.detect_start_dogs_location(park)

    dog = Dog(x, y)

    for route in routes:
        direction, distance = route.split()
        park = dog.move(park, direction, int(distance))

    return [dog.x, dog.y]

dx = {'N':-1, 'S':1, 'E':0, 'W': 0}
dy = {'N': 0, 'S':0, 'E':1, 'W':-1}

def solution(park, routes):
    answer = []
    x, y = -1, -1
    N, M = len(park), len(park[0])
    for i in range(N):
        for j in range(M):
            if park[i][j] == 'S':
                x, y = i, j

    for route in routes:
        dir_, dist = route.split(' ')

        isFalse = False
        for i in range(1, int(dist) + 1):
            nx, ny = x + dx[dir_] * i, y + dy[dir_] * i
            if nx < 0 or ny < 0 or nx > N-1 or ny > M-1:
                isFalse = True
                break
            if park[nx][ny] == 'X':
                isFalse = True
                break

        if isFalse:
            continue
        nx, ny = x + dx[dir_] * int(dist), y + dy[dir_] * int(dist)
        x, y = nx, ny

    answer = [x, y]

    return answer

 

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

'Problem Solving > 프로그래머스' 카테고리의 다른 글

[프로그래머스|파이썬] k진수에서 소수 개수 구하기 (2022 KAKAO BLIND RECRUITMENT/lv.2)  (0) 2023.05.22
[프로그래머스|파이썬] 뒤에 있는 큰 수 찾기 (연습문제/lv.2)  (0) 2023.05.22
[프로그래머스|파이썬] 베스트앨범 (해시/level 3)  (0) 2023.04.29
[프로그래머스|파이썬] 달리기 경주 (연습문제/level 1)  (0) 2023.04.27
[프로그래머스 | 파이썬 / 자바스크립트] 게임 맵 최단거리(깊이/너비 우선 탐색(DFS/BFS)/level 2)  (0) 2023.04.10
[프로그래머스 | 파이썬 / 자바스크립트] 타겟 넘버(깊이/너비 우선 탐색(DFS/BFS)/level 2)  (0) 2023.04.02
'Problem Solving/프로그래머스' 카테고리의 다른 글
  • [프로그래머스|파이썬] 뒤에 있는 큰 수 찾기 (연습문제/lv.2)
  • [프로그래머스|파이썬] 베스트앨범 (해시/level 3)
  • [프로그래머스|파이썬] 달리기 경주 (연습문제/level 1)
  • [프로그래머스 | 파이썬 / 자바스크립트] 게임 맵 최단거리(깊이/너비 우선 탐색(DFS/BFS)/level 2)
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기 (505)
      • 프로그래밍 (41)
        • Programming (1)
        • C | C++ (6)
        • Java (28)
        • Python (5)
      • 웹 프로그래밍 (108)
        • HTML | CSS (5)
        • JavaScript | TypeScript (41)
        • React (25)
        • Vue.js (0)
        • Next.js (18)
        • Spring & Spring Boot (13)
        • JSP & Servlet (1)
        • DB (4)
      • 웹 프로젝트 (77)
        • 웹 프로젝트 (22)
        • 🥨스낵몰 (3)
        • 👨‍👨‍👧‍👧소셜 가계부 (26)
        • 🌜꿈 일기장 (11)
        • 🔮포트폴리오 사이트 (11)
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램 (0)
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼 (0)
        • 😺Just Meow It: 조언 사이트 (2)
        • 📕Workly: 교대근무 다이어리 (1)
      • 앱 프로그래밍 (26)
        • Flutter (24)
        • Kotlin (2)
      • Problem Solving (166)
        • 백준 (52)
        • 프로그래머스 (79)
        • SWEA (29)
      • Computer Science (40)
        • 알고리즘 (14)
        • 컴퓨터 네트워크 (18)
        • 이산수학 (8)
      • Developer (47)
        • 후기 (4)
        • 자료정리 (4)
        • 취업 | 취준 (9)
        • SSAFY (1)
        • 웹개발 교육 프로그램 (9)
        • TIL (20)
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    플러터
    블로그 제작
    SWEA
    포트폴리오
    공식문서
    mysql
    프로젝트
    컴퓨터네트워크
    웹사이트
    ZeroCho
    Jiraynor Programming
    클론 프로젝트
    Next.js
    자바
    타입스크립트
    자바스크립트
    Til
    React
    bfs
    백준
    spring boot
    뉴렉처
    리액트
    AWS
    알고리즘
    구현
    파이썬
    강의내용정리
    프로그래머스
    d3
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
[프로그래머스|파이썬] 공원 산책 (연습문제/level 1)
상단으로

티스토리툴바