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
중복되는 코드가 많은 듯한 느낌이라 줄여보려고 한다
그런데 동,서,남,북으로 갈때 조금씩 달라서 애매한 것 같다
'코딩테스트' 카테고리의 다른 글
[이코테] Chap04 구현 (0) | 2024.04.09 |
---|---|
[이코테] 그리디 알고리즘 (0) | 2024.04.08 |
[Python] 가장 가까운 같은 글자 (0) | 2024.03.07 |
[Python] 문자열 겹쳐쓰기 (0) | 2024.03.05 |
[Python] 추억 점수 (2) | 2024.03.05 |