백준 문제 풀이 - 구현
문제 확인 🏃
7
35
>> 49 26 27 28 29 30 31
48 25 10 11 12 13 32
47 24 9 2 3 14 33
46 23 8 1 4 15 34
45 22 7 6 5 16 35
44 21 20 19 18 17 36
43 42 41 40 39 38 37
5 7
5
1
>> 25 10 11 12 13
24 9 2 3 14
23 8 1 4 15
22 7 6 5 16
21 20 19 18 17
3 3
N = int(input()) # 달팽이의 크기
answer = int(input()) # 찾아야 하는 수
def solution():
graph = [[0] * N for _ in range(N)]
r, c = N//2, N//2
flag = True # True면 위로 오른쪽으로 / False면 아래로 왼쪽으로
flag_answer = True # 좌표를 찾은 경우 False / 좌표를 찾지 못한 경우 True
dr = [-1, 0, 1, 0] # 위 오른 아래 왼
dc = [0, 1, 0, -1]
dir1, dir2, number = 0, 0, 2
ansr, ansc = 0, 0
graph[r][c] = 1
if answer == 1:
flag_answer = False
ansr, ansc = r, c
for num in range(1, N):
if flag:
dir1, dir2 = 0, 1
flag = False
else:
dir1, dir2 = 2, 3
flag = True
for _ in range(num):
r += dr[dir1]
c += dc[dir1]
graph[r][c] = number
if flag_answer and number == answer:
flag_answer = False
ansr, ansc = r, c
number += 1
for _ in range(num):
r += dr[dir2]
c += dc[dir2]
graph[r][c] = number
if flag_answer and number == answer:
flag_answer = False
ansr, ansc = r, c
number += 1
for _ in range(num):
r += dr[0]
c += dc[0]
graph[r][c] = number
if flag_answer and number == answer:
flag_answer = False
ansr, ansc = r, c
number += 1
for i in range(N):
for j in range(N):
print(graph[i][j], end=" ")
print()
print(ansr+1, ansc+1)
solution()

N = int(input()) # 달팽이의 크기
answer = int(input()) # 찾아야 하는 수
def solution():
graph = [[0] * N for _ in range(N)]
r, c = N//2, N//2
flag, ansr, ansc = True, 0, 0
dir = [[-1, 0], [0, 1], [1, 0], [0, -1]] # 위 오른쪽 아래 왼쪽
dir_idx = 0
number, count = 1, 1
for _ in range(N-1):
for _ in range(2):
for _ in range(count):
graph[r][c] = number
if flag and number == answer:
flag, ansr, ansc = False, r, c
r += dir[dir_idx][0]
c += dir[dir_idx][1]
number += 1
dir_idx = (dir_idx + 1) % 4
count += 1
for _ in range(count):
graph[r][c] = number
if flag and number == answer:
flag, ansr, ansc = False, r, c
r += dir[dir_idx][0]
c += dir[dir_idx][1]
number += 1
for i in range(N):
for j in range(N):
print(graph[i][j], end=" ")
print()
print(ansr+1, ansc+1)
solution()

반복되는 횟수에 집중해서 문제 풀어봄.. 다른 분들은 더 간단히 푸신것 같던데 꼭 다른 코드도 생각해봐야지😧

