본문 바로가기
알고리즘/SWExpert

SWExpert_1208_Flatter

by 박 현 황 2021. 2. 2.

1208_Flatter

문제유형: 배열
사용언어: 자바
열: 2021년 2월 2일

문제 링크

SW Expert Academy

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        final int SIZE = 100;
        int arr[] = new int[100]; //가로 길이가 100인 벽면

        /*모든 위치에서 상자의 높이는 1이상 100이하로 주어진다.

        덤프 횟수는 1이상 1000이하로 주어진다.

        주어진 덤프 횟수 이내에 평탄화가 완료되면 더 이상 덤프를 수행할 수 없으므로 그 때의 최고점과 최저점의 높이 차를 반환한다 (주어진 data에 따라 0 또는 1이 된다).*/

        int N = 1;
        int result = 0; //테스트 케이스의 최고점과 최저점의 높이 차이 출력할 변수
        while(true) {
            if(N == 11)
                break;
            int dump = sc.nextInt(); //덤프 횟수
            for(int i=0;i<SIZE;i++) {
                arr[i] = sc.nextInt();
            } //상자의 높이값 입력

            while(dump>0) {
                int MAX = 1;
                int MIN = 100;
                int max_value = 0,min_value = 0;

                for(int i=0;i<SIZE;i++) {
                    if(arr[i] > MAX) {
                        MAX = arr[i];
                        max_value = i;
                    }
                    if(arr[i]<MIN) {
                        MIN = arr[i];
                        min_value = i;
                    }
                }

                arr[max_value] -=1;
                arr[min_value] +=1;
                dump--;
            }


            int MAX = 1;
            int MIN = 100;
            for(int i=0;i<SIZE;i++) {
                if(arr[i] > MAX) 
                    MAX = arr[i];

                if(arr[i]<MIN) 
                    MIN = arr[i];

            }

            result = MAX-MIN;
            System.out.println("#"+N+" "+result);
            N++;//테스트 케이스 값 증가
        }
    }

/*    public static void Falt(int dump) {
        if(dump == 0)
            return;

        int MAX = 1;
        int MIN = 100;
        int max_value = 0,min_value = 0;

        for(int i=0;i<SIZE;i++) {
            if(arr[i] > MAX) {
                MAX = arr[i];
                max_value = i;
            }
            if(arr[i]<MIN) {
                MIN = arr[i];
                min_value = i;
            }
        }

        arr[max_value] -=1;
        arr[min_value] +=1;

    }*/
}

밑에 재귀함수로 풀어볼려고 하다가 그냥 제출했다.

나중에 재귀 함수로 한번 풀어보는 것도 나쁘지 않을 것 같다.

그리고 밑에서 result 출력할 때 MIN과 MAX값을 for문 한번 더 돌려서 구했는데 이거 말고 다른 방법이 없을 지 생각해보면 좋을 것 같다.

'알고리즘 > SWExpert' 카테고리의 다른 글

SWExpert_1225_암호생성기  (1) 2021.02.04
SWExpert_2001_파리퇴치  (0) 2021.02.03
SWExpert_2805_농작물 수확하기  (0) 2021.02.03
SWExpert_1873_상호의 배틀필드  (0) 2021.02.03
SWExpert_1289_원재의 메모리 복구하기  (0) 2021.02.03