All Articles

[SWEA] 1206 s/w 문제해결 기본 1일차 view

[SWEA] 1206 s/w 문제해결 기본 1일차 view - python, c

문제

문제 자체는 크게 어렵지 않다. 양 끝 2칸에는 건물이 없기 때문에 계산이 어렵지 않다. 주위 4개의 건물 높이와 자기 자신의 건물 높이를 비교. 내가 더 높을 때에만 가장 높은 주위 건물과의 차를 result에 더해나간다.

python에서는 int로 받을 수 있게 처리를 잘 해주면 되고, max값을 구하는 함수가 있기 때문에 어렵지 않게 문제를 풀 수 있다.

c에서는 max 함수 대신 직접 max 함수를 생성했다.

  • python

    for tc in range(10):
      n = int(input())
      data = list(map(int, input().split()))
      result = 0
      for i in range(2, n-2):
          around = max([data[i - 2], data[i - 1], data[i + 1], data[i + 2]])
          if(data[i] > around):
              result += data[i] - around
    
      print(f"#{tc + 1} {result}")





  • c

    #include <stdio.h>
    int n;
    int buildings[1010];
    int check_max;
    int result;
    
    int max(int a, int b, int c, int d) {
    	int result = a;
    	if (result < b) result = b;
    	if (result < c) result = c;
    	if (result < d) result = d;
    
    	return result;
    }
    
    int main(void) {
    	for (int tc = 1; tc <= 10; tc++) {
    		scanf("%d", &n);
    		result = 0;
    		for (int cnt = 0; cnt < n; cnt++) {
    			scanf("%d", &buildings[cnt]);
    		}
    		for (int cnt = 2; cnt < n - 2; cnt++) {
    			check_max = max(buildings[cnt - 2], buildings[cnt - 1], buildings[cnt + 1], buildings[cnt + 2]);
    			if (buildings[cnt] > check_max) result += (buildings[cnt] - check_max);
    		}
    		printf("#%d %d\n", tc, result);
    	}
    	return 0;
    }