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]]
힘들게 완성했는데 결과를보니 뭔가 아름답다 ㅋㅋ
'Codingtest' 카테고리의 다른 글
[Mysql level 4 ] 특정 세대의 대장균 찾기 Select (0) | 2024.08.10 |
---|---|
SQL Group by 오류 이유 (0) | 2024.07.10 |
JAVA ArrayList,subList 생성,추가,부분집합 범위참조 방법 (1) | 2024.04.10 |
[JAVA] 백준1152번 구현,문자열 (0) | 2024.04.10 |
[JAVA] 백준 2562번 구현문제 (0) | 2024.04.08 |