Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 정처기
- Beakjoon
- Backjoon
- Xilinx
- Vivado
- 자격증
- Zynq
- verilog HDL
- hdl
- java
- amba
- chip2chip
- baekjoon
- 정보처리기사
- UNIX
- axi
- 실기
- C++
- vitis
- boj
- Bus
- FPGA
- HDLBits
- SQL
- 리눅스
- 백준
- linux
- verilog
- AMBA BUS
- 코딩테스트
Archives
- Today
- Total
Hueestory
정수를 나선형으로 배치하기 (Python) 본문

접근
1. 시계방향으로 이동 중 배열의 끝에 닿거나 다음으로 이동할 칸에 이미 0이 아닌 값이 들어가 있으면 방향 전환
2. 방향 전환은 x(행), y(열)로 접근
3. (dx, dy)에서 →(0, 1), ↓(1, 0), ←(0,-1), ↑(-1, 0)
4. 이를 dx와 dy로 나누면 dx = [0, 1, 0, -1], dy = [1, 0, -1, 0]
코드
def solution(n):
answer = [[0] * n for _ in range(n)]
x, y = 0, 0
dir = 0 # 0(→), 1(↓), 2(←), 3(↑)
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
for i in range(1, n**2+1):
answer[x][y] = i
nx = x + dx[dir]
ny = y + dy[dir]
# 벽에 닿거나, 다음 칸에 0이 아닌 것이 들어가 있는 경우
if not(0 <= nx < n and 0 <= ny < n) or answer[nx][ny] != 0:
dir = (dir + 1) % 4 # 방향 전환
nx = x + dx[dir]
ny = y + dy[dir]
x, y = nx, ny
return answer
결과

'PS > programmers' 카테고리의 다른 글
| [2019 KAKAO BLIND] - 오픈채팅방 (C++) (1) | 2024.08.28 |
|---|---|
| [2022 KAKAO BLIND] - 주차 요금 계산 (C++) (0) | 2024.08.28 |
| [2021 KAKAO BLIND] - 신규 아이디 추천 (C++) (0) | 2024.08.27 |
| [2022 KAKAO BLIND] - k진수에서 소수 개수 구하기 (C++) (0) | 2024.08.27 |
| [2019 KAKAO BLIND] - 실패율 (C++) (0) | 2024.08.08 |
Comments