본문 바로가기
Codingtest

[1913]백준 달팽이 실버3 구현

by Runningturtle 2024. 7. 9.

 

https://www.acmicpc.net/problem/1913

 

주어진 입력값에 따라  달팽이모형

 

입력값이 9라면

9 2 3

8 1 4  꼴의달팽이 껍질을 만들고 특정값의 좌표를 반환하는 문제다

7 6 5

 

 

 

노가다의 흔적

 

입력값이 5일때 찍히는 좌표의 규칙을 찾기위해서 좌표 순서대로 규칙을 찾아보려고 일일이 다 진행과정을 적어봄

 

결과적으로 5의 달팽이 모형은 만드는데 성공했으나 다른 값은 이상하게 나와 실패..

 

그래서 다른방식으로 접근!!!

 

결국 달팽이 모형은 ㅁ 모양이 여러개 겹친 모양이므로 While문에 ㅁ 모양을 무한하게 끝까지 만들도록 코드를 짜보기로함

 

그 결과

 

 

아래는 코드

a=int(input()) ## 5 입력 
find=int(input()) ## 35 입력 

li=[]
temp=[]

## n X n 2차원 배열 선언 
for i in range(a):
    for j in range(a):
        temp.append(0)
    li.append(temp)
    temp=[]

num=a**2

x,y=0,0
key=1
while(num>1):
    for i in range(0+x,a-y):
        if num>0:
            li[i][y]=num
            num-=1
    for i in range(1+x,a-y):
        if num>0:
            li[a-1-x][i]=num
            num-=1
    for i in range(a-2-x,-1+x,-1):
        if num>0:
            li[i][a-1-y]=num
            num-=1
    for i in range(a-2-x,0+y,-1):
        if num>0:
            li[x][i]=num
            num-=1
    x+=1
    y+=1
     
      
b=int(a/2)
li[b][b]=num

key=0
for i in range(a):
    for j in range(a):
        if li[i][j]==find:
            x=j
            y=i
            key=1
            break
        
    if key==1:
        break

for i in li:
    print(' '.join(map(str,i))) ## 이거 퍼왔음
print(y+1,x+1)


#풀이방법 ㅁ 사각형을 최대치까지 만든후 끝인 num값이 1에 다다르면 마무리 점을찍고 마무리.

 

 

※ 코드에 15를 대입한 결과

 

 [225, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183],
 [224, 169, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 184],
 [223, 168, 121, 82,  83,  84,  85,  86,  87,  88,  89,  90,  91,  134, 185],
 [222, 167, 120, 81,  50,  51,  52,  53,  54,  55,  56,  57,  92,  135, 186],
 [221, 166, 119, 80,  49,  26,  27,  28,  29,  30,  31,  58,  93,  136, 187],
 [220, 165, 118, 79,  48,  25,  10,  11,  12,  13,  32,  59,  94,  137, 188],
 [219, 164, 117, 78,  47,  24,  9,   2,   3,   14,  33,  60,  95,  138, 189],
 [218, 163, 116, 77,  46,  23,  8 ,  1,   4,   15,  34,  61,  96,  139, 190],
 [217, 162, 115, 76,  45,  22,  7,   6,   5,   16,  35,  62,  97,  140, 191],
 [216, 161, 114, 75,  44,  21,  20,  19,  18,  17,  36,  63,  98,  141, 192],
 [215, 160, 113, 74,  43,  42,  41,  40,  39,  38,  37,  64,  99,  142, 193],
 [214, 159, 112, 73,  72,  71,  70,  69,  68,  67,  66,  65,  100, 143, 194],
 [213, 158, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 144, 195],
 [212, 157, 156, 155, 154, 153, 152, 151, 150, 149, 148, 147, 146, 145, 196],
 [211, 210, 209, 208, 207, 206, 205, 204, 203, 202, 201, 200, 199, 198, 197]]

 

힘들게 완성했는데 결과를보니 뭔가 아름답다 ㅋㅋ