728x90
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/181832
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
[개요]
1. 오른쪽으로 돌다가 끝에 다다르면 아래쪽으로 방향 바꾸기
2. 아래쪽으로 돌다가 끝에 다다르면 왼쪽으로 방향 바꾸기
3. 왼쪽으로 돌다가 끝에 다다르면 위쪽으로 방향 바꾸기
[이슈]
끝을 어떻게 판단할 수 있을까?
1. 다음 좌표의 값이 0이 아니어야 함
2. 다음 좌표가 0보다 작거나, n보다 크거나 같으면 끝임
[파이썬문법]
1. 리스트 0으로 초기화 : answer = [[0 for i in range(n)] for j in range(n)]
정답코드
def solution(n):
answer = [[]]
answer = [[0 for i in range(n)] for j in range(n)]
val = 0
#우 하 좌 상
d = 0
dx = [0, 1, 0, -1] #행
dy = [1, 0, -1, 0] #열
#현재 좌표
cur = [0,0]
while val < n*n:
#현재좌표 값 채우기
val += 1
answer[cur[0]][cur[1]] = val
#다음 좌표
x = cur[0] + dx[d]
y = cur[1] + dy[d]
next = [x, y]
#print(f"next={next}")
#다음좌표값이 0보다 크면 방향 바꾸기
#다음좌표가 맨끝이면 방향바꾸기
if (x>n-1 or x<0 or y>n-1 or y<0) or answer[next[0]][next[1]] > 0:
if d < 3:
d += 1
else:
d = 0
#print(f"d={d}")
#현재좌표를 다음 좌표로 바꾸기
x = cur[0] + dx[d]
y = cur[1] + dy[d]
next = [x, y]
cur = next
#print(answer)
return answer
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준] 2606 - 바이러스 (python3) (0) | 2024.05.10 |
---|---|
[프로그래머스] 옹알이(1) (0) | 2024.03.25 |
[프로그래머스] 타겟넘버 (0) | 2024.01.05 |
[파이썬] 괄호 짝 확인하기 (0) | 2023.12.15 |
[파이썬] 런던 폭우 Ⅱ (0) | 2023.09.30 |