https://school.programmers.co.kr/learn/courses/30/lessons/172928
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 접근
- S의 위치를 찾아 저장할 리스트
- "op n"에서 op으로 n만큼 간다는 것을 조건문을 사용해 분기
- E, W로 갈 때는 행의 변화X / N, S로 갈 때는 열의 변화X => c_row, c_col로 체크
- E, S로 갈 때는 부호가 + / W, N로 갈 때는 부호 - => sign으로 체크
- 해당 칸으로 이동할 수 있을지의 여부를 체크
- 범위를 벗어나는 경우
- 장애물이 있는 경우 => 무시하고 다음 명령으로 점프 => 메인 함수에서 possible로 체크
코드
# 해당 칸으로 갈 수 있는지의 여부를 체크
def check(park, row, col):
# 범위를 벗어나는 경우
if row < 0 or row >= len(park) or col < 0 or col >= len(park[0]):
return False
# 장애물이 있는 경우
if park[row][col] == 'X':
return False
return True
def solution(park, routes):
answer = []
row = 0
for i in park:
if 'S' in i:
col = i.find('S')
break
row += 1
for route in routes:
possible = True # 갈 수 있다면 True, 아니면 False
if route[0] == 'E' or route[0] == 'W':
c_row = 0 # 행의 변화 x
else:
c_row = 1
if route[0] == 'N' or route[0] == 'S':
c_col = 0 # 열의 변화 x
else:
c_col = 1
if route[0] == 'E' or route[0] == 'S':
sign = 1 # 부호 양수
if route[0] == 'W' or route[0] == 'N':
sign = -1 # 부호 음수
steps = int(route[2]) # 얼만큼 가야하는지
for j in range(steps):
cur_row = row + c_row * sign * (j+1)
cur_col = col + c_col * sign * (j+1)
if check(park, cur_row, cur_col) == False :
possible = False
break
if possible == True:
row += c_row * sign * steps
col += c_col * sign * steps
answer.append(row)
answer.append(col)
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스]Lv2. 교점에 별 만들기(Python) (0) | 2024.02.29 |
---|---|
[프로그래머스]Lv2. 혼자 놀기의 달인(Python) (0) | 2024.02.29 |
[프로그래머스]Lv3. 인사고과(Python) (0) | 2024.02.29 |
[프로그래머스]Lv2. 우박수열 정적분(Python) (0) | 2024.02.29 |
[프로그래머스]Lv1. 달리기 경주(Python) (0) | 2024.02.29 |