coding test

[파이썬, C] 절대값의 합 구하기

잔망루피 2021. 2. 23. 23:06

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