by SW academy
5*5의 2차 배열에 무작위로 25개의 숫자로 초기화를 한 후 25개의 각 요소에 대해서 그 요소와 이웃한 요소와의 차의 절대값을 구한 뒤, 구한 모든 값의 총합을 구한다.
예를 들어 아래 그림에서 7이 이웃한 값은 2, 6, 8, 12이며 차의 절대값은 12다.
|2-7|+|8-7|+|12-7|+|6-7|=12
👩💼 나의 풀이
import math
def calculate():
global sum
for i in range(5):
for j in range(5):
for p in range(4):
x=j+dx[p]
y=i+dy[p]
if 0 <= x < 5 and 0 <= y < 5 : # 인덱스 범위 체크
sum+=abs(arr[i][j]-arr[y][x])
arr=[list(map(int, input().split())) for _ in range(5)] # 5*5 2차원 리스트
dx=[0, 0, -1, 1] # 상하좌우
dy=[-1, 1, 0, 0]
sum=0
calculate()
print(sum)
행 우선 순회다.
🍗 풀이
#include<stdio.h>
#include<stdbool.h>
bool isWall(int x, int y) // 인덱스 범위 검사
{
if (x < 0 || x >= 5) return true;
if (y < 0 || y >= 5) return true;
return false;
}
int calAbs(int a1, int a2) { // 절대값으로 표현
return (a1 - a2) > 0 ? (a1 - a2) : -(a1 - a2);
}
void main()
{
int ary[][5] = { // 5*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 dx[] = { 0, 0, -1, 1 }; // 상하좌우
int dy[] = { -1, 1, 0, 0 };
int newX, newY;
int sum = 0;
for (int y = 0; y < 5; y++) { // 행
for (int x = 0; x < 5; x++) { // 열
for (int dir = 0; dir < 4; dir++) {
newX = x + dx[dir];
newY = y + dy[dir];
if (!isWall(newX, newY)) sum += calAbs(ary[y][x], ary[newY][newX]);
}
}
}
printf("sum=%d\n", sum);
}
반응형
'coding test' 카테고리의 다른 글
[C] Ladder (0) | 2021.02.25 |
---|---|
[C, Python] 2차원 배열 정렬 (0) | 2021.02.25 |
[C] Baby-Gin Game (0) | 2021.02.16 |
[C] 거스름돈 줄이기 (0) | 2021.02.16 |
[파이썬] Gravity (0) | 2021.02.10 |