반응형
프로그래머스 문제
공원 산책
https://school.programmers.co.kr/learn/courses/30/lessons/172928
1차 풀이 (실패)
노가다로 풀어봤다!
동서남북 경우를 다 나누기 때문에 코드가 길어질 수 밖에 없는거같다.
함수로 정리해서 만들면 좀 더 코드가 짧아질듯
def solution(park, routes):
answer = []
for i in range(len(park)):
for j in range(len(park[0])):
# 출발점 발견
if park[i][j] == "S":
answer.append(i)
answer.append(j)
for k in routes:
direction = k[0]
move = int(k[2])
if direction == 'E':
#answer[1] += move
change=0
try:
for t in range(1, move+1):
check_move = answer[1] + t
if park[answer[0]][check_move] == "X":
change = 1
break
except:
change = 1
if change == 0:
answer[1] += move
elif direction == 'W':
change=0
try:
for t in range(1, move+1):
check_move = answer[1] - t
if park[answer[0]][check_move] == "X":
change = 1
break
except:
change = 1
if change == 0:
answer[1] -= move
elif direction == 'S':
change=0
try:
for t in range(1, move+1):
check_move = answer[0] + t
if park[check_move][answer[1]] == "X":
change = 1
break
except:
change = 1
if change == 0:
answer[0] += move
elif direction == 'N':
change=0
try:
for t in range(1, move+1):
check_move = answer[0] - t
if park[check_move][answer[1]] == "X":
change = 1
break
except:
change = 1
if change == 0:
answer[0] -= move
return answer
2차 풀이 (성공!)
try except를 사용하여 X가 있는지 확인하는데
park의 배열을 지정하는 index 값이 음수가 되서 계속 실패 했었다
그래서 수정했더니 성공!
def solution(park, routes):
answer = []
for i in range(len(park)):
for j in range(len(park[0])):
# 출발점 발견
if park[i][j] == "S":
answer.append(i)
answer.append(j)
for k in routes:
direction = k[0]
move = int(k[2])
if direction == 'E':
#answer[1] += move
change=0
try:
for t in range(1, move+1):
check_move = answer[1] + t
if park[answer[0]][check_move] == "X":
change = 1
break
except:
change = 1
if change == 0:
answer[1] += move
elif direction == 'W':
change = 0
try:
if answer[1] - move < 0:
change = 1
else:
for t in range(1, move+1):
check_move = answer[1] - t
if park[answer[0]][check_move] == "X":
change = 1
break
except:
change = 1
if change == 0:
answer[1] -= move
elif direction == 'S':
change = 0
try:
for t in range(1, move+1):
check_move = answer[0] + t
if park[check_move][answer[1]] == "X":
change = 1
break
except:
change = 1
if change == 0:
answer[0] += move
elif direction == 'N':
change=0
try:
if answer[0] - move < 0:
change = 1
else:
for t in range(1, move+1):
check_move = answer[0] - t
if park[check_move][answer[1]] == "X":
change = 1
break
except:
change = 1
if change == 0:
answer[0] -= move
return answer
728x90
반응형
'코딩 테스트 > Programmers' 카테고리의 다른 글
[Python] [Level 2] 주식 가격 (아주 좋은 문제) (0) | 2023.03.28 |
---|---|
[Python] [Level 2] 주차 요금 계산 (프로그래머스 문제) (0) | 2023.03.26 |
[Python] [Level 1] 크기가 작은 부분 문자열 (0) | 2023.03.16 |
[Python] [Level 1] 대충 만든 자판 (enumerate 활용하기) (0) | 2023.03.15 |
[Python] [Level 2] 시소 짝꿍 (Counter 함수 활용하기) (0) | 2023.03.14 |