본문 바로가기
Problem Solving/SWEA

[SWEA] 1208. [S/W 문제해결 기본] 1일차 - Flatten

by 테리는당근을좋아해 2020. 2. 16.

문제

위와 같이 상자가 쌓여있을 때 ,가장 높게 쌓인 상자를 가장 낮게 쌓인 상자쪽으로 옮기는 평탄화 작업을 한다.

1cycle에 한 개의 상자를 옮길 때, 입력된 값만큼의 사이클을 반복했을 때, 가장 높게 쌓인 상자와 낮게 쌓인 상자를 차이를 구하는 문제

 

풀이방법

1) 매 사이클 마다 가장 높게 쌓인 상자와 낮게 쌓인 상자를 찾는다

 

2) 가장 높게 쌓인 상자의 갯수를 1 감소시키고 낮게 쌓인 상자의 갯수를 1 증가시킨다.

 

3) 이렇게 n번 반복했을 때 가장 높은 상자와 낮은 상자의 차를 구한다.

 

소스코드

package samsung;

import java.util.*;

public class s_1208 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		for(int t = 1; t <= 10; t++) {
			int n = sc.nextInt();
			int[] a = new int[100];
			for(int i = 0; i < 100; i++) {
				a[i] = sc.nextInt();
			}
			
			for(int i = 0; i < n; i++) {
				int max = 0;
				int max_idx = 0;
				int min = 1001;
				int min_idx = 0;
				for(int j = 0; j < 100; j++) {
					if(a[j] >= max) {
						max = a[j];
						max_idx = j;
					}
					if(a[j] <= min) {
						min = a[j];
						min_idx = j;
					}
				}
				a[max_idx]--;
				a[min_idx]++;
			}
			int max = 0;
			int min = 1001;
			for(int i = 0; i < 100; i++) {
				max = Math.max(max, a[i]);
				min = Math.min(min, a[i]);
			}
			System.out.println("#" + t + " " + (max-min));
		}
	}
}

댓글