코딩테스트

[Python] 공원 산책

snoony 2024. 3. 12. 17:23

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

 

프로그래머스

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

programmers.co.kr

def solution(park, routes):
    answer = []
    # 시작 좌표를 담기 위한 변수들 init
    answer_i = 0
    answer_j = 0
    for i in range(len(park)):
        for j in range(len(park[i])):
        # 시작 좌표 얻기
            if park[i][j] == 'S':
                answer_i = i
                answer_j = j
    # 각 route에 대해서
    for route in routes:
        flag = 0 # 지나가는 길에 장애물이 있는지 확인하기 위한 flag
        dir, dis = route.split(" ")
        dis = int(dis)
        if dir == 'E': # 동쪽
            if answer_j + dis >= len(park[answer_i]): # 공원을 넘어갈 때
                continue
            else:
                for i in range(1, dis+1):
                # 가는길에 장애물이 있을 때
                    if park[answer_i][answer_j+i] == 'X': 
                        flag = 1
                        break
                if flag == 1: # 장애물이 있다면
                    continue
                else: # 없다면
                    answer_j += dis
        elif dir == 'S':
            if answer_i + dis >= len(park): # 공원을 넘어갈 때
                continue
            else:
                for i in range(1, dis+1):
                    if park[answer_i+i][answer_j] == 'X':
                        flag = 1
                        break
                if flag == 1:
                    continue
                else:
                    answer_i += dis
        elif dir == 'W':
            if answer_j - dis < 0: # 공원을 넘어갈 때
                continue
            else:
                for i in range(1, dis+1):
                    if park[answer_i][answer_j-i] == 'X':
                        flag = 1
                        break
                if flag == 1:
                    continue
                else:
                    answer_j -= dis
        elif dir == 'N':
            if answer_i - dis < 0: # 공원을 넘어갈 때
                continue
            else:
                for i in range(1,dis+1):
                    if park[answer_i-i][answer_j] == 'X':
                        flag = 1
                        break
                if flag == 1:
                    continue
                else:
                    answer_i -= dis
    # answer 배열에 좌표 append
    answer.append(answer_i)
    answer.append(answer_j)
    return answer

중복되는 코드가 많은 듯한 느낌이라 줄여보려고 한다

그런데 동,서,남,북으로 갈때 조금씩 달라서 애매한 것 같다