by SW academy
😉 나의 풀이
def sel_min():
_min=0
minX, minY=0, 0
_min=arr[0][0]
for i in range(5):
for j in range(5):
if _min > arr[i][j]:
_min=arr[i][j]
minX, minY=i, j
arr[minX][minY]=26
return _min
arr=[[9, 20, 2, 18, 11],
[19, 1, 25, 3, 21],
[8, 24, 10, 17, 7],
[15, 4, 16, 5, 6],
[12, 13, 22, 23, 14]]
sorted_arr=[[0]*5 for _ in range(5)]
cur_min=-1
newX, newY=0,0
dx=[1, 0, -1, 0]
dy=[0, 1, 0, -1]
dir_stat=0
for i in range(25):
cur_min=sel_min()
X=newX
Y=newY
sorted_arr[Y][X]=cur_min
newX=X+dx[dir_stat]
newY=Y+dy[dir_stat]
if newY > 4 or newX > 4 or sorted_arr[newY][newX] != 0 :
dir_stat=(dir_stat+1)%4
newX=X+dx[dir_stat]
newY=Y+dy[dir_stat]
for i in range(5):
for j in range(5):
print(sorted_arr[i][j], end=" ")
print("\n")
함수 sel_min에서 2차원 배열 arr에서 최소 값을 찾는다. _min=최소 값, minX와 minY는 _min의 인덱스.
배열 최소값을 26으로 바꿔서 다시 함수 sel_min을 호출할 때 다음 최소 값을 찾을 수 있게 함.
sorted_arr에 달팽이 모양으로 정렬시킨다.
우하좌상 순으로 순회.
newX와 newY로 최소값을 삽입할 위치를 찾는다.
sorted_arr에 0이 아닌 값이 있거나 좌표 newY, newX가 4보다 크면 값을 조정한다.
sorted_arr[newY][newX] != 0에서 인덱스 에러가 떠서 newY랑 newX 뒤에 확인하게 했다.
(dir_stat+1)%4로 방향을 바꾼다. 다음 방향으로 넘어가야하니까 +1하고 방향은 4가지 중 하나다.
풀이
// by SW academy
#include<stdio.h>
int sel_min(int ary[][5]) {
int min = 0;
int minX = 0, minY = 0;
min = ary[0][0];
for(int i=0; i<5; i++)
for(int j=0; j<5; j++)
if (min > ary[i][j]) {
min = ary[i][j];
minX = i; minY = j;
}
ary[minX][minY] = 26; // 가장 작은 값을 26으로 바꿔둠
return min;
}
void main() {
int ary[][5] = {
{9, 20, 2, 18, 11},
{19, 1, 25, 3, 21},
{8, 24, 10, 17, 7},
{15, 4, 16, 5, 6},
{12, 13, 22, 23, 14}
};
int sorted_ary[5][5] = { 0 };
int cur_min = -1;
int X, Y;
int newX = 0, newY = 0;
int dx[] = { 1, 0, -1, 0 }; // 상하좌우
int dy[] = { 0, 1, 0, -1 };
int dir_stat = 0;
for (int i = 0; i < 25; i++) {
cur_min = sel_min(ary);
X = newX;
Y = newY;
sorted_ary[Y][X] = cur_min;
newX = X + dx[dir_stat];
newY = Y + dy[dir_stat];
if (sorted_ary[newY][newX] != 0 || newY > 4 || newX > 4) {
dir_stat = (dir_stat + 1) % 4;
newX = X + dx[dir_stat];
newY = Y + dy[dir_stat];
}
}
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++)
printf("%3d", sorted_ary[i][j]);
printf("\n");
}
}
반응형
'coding test' 카테고리의 다른 글
[C] 패턴 매칭 해결하기 (0) | 2021.03.04 |
---|---|
[C] Ladder (0) | 2021.02.25 |
[파이썬, C] 절대값의 합 구하기 (0) | 2021.02.23 |
[C] Baby-Gin Game (0) | 2021.02.16 |
[C] 거스름돈 줄이기 (0) | 2021.02.16 |