Completion over Perfection

프로그래머스 - 공원 산책 (파이썬3 Python3) 본문

파이썬 (Python)

프로그래머스 - 공원 산책 (파이썬3 Python3)

난차차 2023. 9. 2. 11:08
반응형

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

 

프로그래머스

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

programmers.co.kr

 

 

 

 

로봇의 이동경로를 미리 입력받아서 공원에서 이동을 시키면 되는데, 까다로운 부분이 있습니다. 

 

이동명령을 수행하다가 만약 중간에 공원을 벗어나거나 장애물이 있는 경우라면 해당 명령어를 무시해야되는데, 

이럴경우 그 명령을 수행하기 전의 위치로 돌아가야 합니다. 

 

정리하자면, 

① 이동 명령을 수행하는 중간에 단 한번이라도 공원밖으로 나가거나 장애물을 만나면 그 명령어를 무시

    (명령어를 수행하기 바로 직전의 위치로 되돌아가서 다음 명령어를 수행해야함)

② 이동명령을 정상적으로 다 수행했다면 이동완료된 위치에서 다음 이동명령을 수행

 

이렇게 구현해주면 됩니다. 

코드 참고해주세요.

 

def solution(park, routes):
    answer = []

    for i in range(len(park)):
        for j in range(len(park[0])):
            if park[i][j] == 'S':
                curX, curY = j, i
                successX, successY = j, i

    # print(curX, curY)

    for route in routes: # 명령어를 하나씩 꺼내면서 수행
        direction, step = route.split() # 방향과 거리를 분리
        step = int(step)
        # print("curX : ", curX, "curY : ", curY, "direction : ", direction, "step : ", step)

        if direction == 'E': # 동쪽으로 이동 X좌표
            for i in range(step):
                # print(direction, curX, curY, i)
                nextX = curX + 1
                # print("nextX : ", nextX)
                if nextX < 0 or nextX >= len(park[0]) or park[curY][nextX] == 'X':
                    curX = successX
                    curY = successY
                    break
                else:
                    if i == step - 1:
                        successX = nextX
                        successY = curY
                    curX = nextX                        

            
        if direction == 'W': # 서쪽으로 이동 X좌표
            for i in range(step):
                # print(direction, curX, curY, i)
                nextX = curX - 1
                # print("nextX : ", nextX)
                if nextX < 0 or nextX >= len(park[0]) or park[curY][nextX] == 'X':
                    curX = successX
                    curY = successY
                    break
                else:
                    if i == step - 1:
                        successX = nextX
                        successY = curY
                    curX = nextX
    
        if direction == 'S': # 남쪽으로 이동 Y좌표
            for i in range(step):
                # print(direction, curX, curY, i)
                nextY = curY + 1
                # print("nextY : ", nextY)
                if nextY < 0 or nextY >= len(park) or park[nextY][curX] == 'X':
                    curX = successX
                    curY = successY
                    break
                else:
                    if i == step - 1:
                        successX = curX
                        successY = nextY
                    curY = nextY
                        
        if direction == 'N': # 남쪽으로 이동 Y좌표
            for i in range(step):
                # print(direction, curX, curY, i)
                nextY = curY - 1
                # print("nextY : ", nextY)
                if nextY < 0 or nextY >= len(park) or park[nextY][curX] == 'X':
                    curX = successX
                    curY = successY
                    break
                else:
                    if i == step - 1:
                        successX = curX
                        successY = nextY
                    curY = nextY
    
    answer.append(curY)
    answer.append(curX)

    # print(answer)

    return answer

 

 

 

반응형
Comments