https://www.acmicpc.net/problem/1913
1. 난이도 실버3
2. 내가 작성한 풀이
숫자가 커지는 방향으로 구현하면 방향전환이 너무 많이 일어날 것 같아 큰 수 부터 작은 수를 채우는 방향으로 구현했다.
1. 배열을 n*n으로 선언한다.
2. 각 layer 마다 왼쪽 꼭짓점은 (i,i)값으로 채워주고, 아래, 오른쪽, 위, 왼쪽 순서대로 이동한다.
+ 이미 왼쪽 꼭짓점이 채워져있기 때문에 왼쪽으로 이동할 경우 1번 덜 움직인다.
3. 2번을 layer 갯수만큼 반복한다.
4. 가운데를 1로 채운다.
n = int(input())
check = int(input())
maps = [[0] * n for _ in range(n)]
def repeat(move,now):
global now_num
maps[now[0]][now[1]] = now_num
dx = [1,0,-1,0]
dy = [0,1,0,-1]
for i in range(4):
for j in range(move):
if i == 3 and j == move-1: # ← 방향은 다른 방향보다 1번 덜 움직임
continue
now = (now[0] + dx[i], now[1] + dy[i]) #현재 위치 갱신
now_num -= 1
maps[now[0]][now[1]] = now_num #배열에 숫자 채워주기
now_num = n*n
cnt = n//2 #layer수
move = n-1
for i in range(cnt):
now = (i,i) #현재 위치
repeat(move,now)
move -= 2 #layer마다 움직이는 거리가 2씩 줄어듦
now_num -= 1
maps[cnt][cnt] = 1 #가운데 채우기
for i in range(n): #전체 maps 출력
for j in range(n):
print(maps[i][j], end=" ")
if maps[i][j] == check: #찾고자 하는 위치 확인
check = (i+1, j+1)
print()
for i in range(2): #check 출력
print(check[i],end=" ")
3. 메모
구글링 해보니까 작은수 => 큰수도 할 만 한 거 같다.
담에는 이 방식으로 해봐야지
'🔅코딩테스트 공부🔅 > ❗백준' 카테고리의 다른 글
[백준] 12933번 오리(python) (0) | 2023.04.20 |
---|---|
[백준] 1747번 소수&팰린드롬(python) (0) | 2023.04.19 |
[백준] 20436번 ZOAC 3(python) (1) | 2023.04.17 |
[백준] 1244번 스위치 켜고 끄기(python) (0) | 2023.04.15 |
[백준] 4396번 지뢰 찾기(python) (0) | 2023.04.14 |
댓글