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

[Java] SWEA1208_Flatten

by 댕꼬 2022. 3. 16.
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV139KOaABgCFAYh 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

[입력] 

(테스트케이스 중 1개의 예시)

834
42 68 35 1 70 25 79 59 63 65 6 46 82 28 62 92 96 43 28 37 92 5 3 54 93 83 22 17 19 96 48 27 72 39 70 13 68 100 36 95 4 12 23 34 74 65 42 12 54 69 48 45 63 58 38 60 24 42 30 79 17 36 91 43 89 7 41 43 65 49 47 6 91 30 71 51 7 2 94 49 30 24 85 55 57 41 67 77 32 9 45 40 27 24 38 39 19 83 30 42 

 

[출력]

#1 13

 

[풀이]

dump : 제일 높은곳에 있는 상자를 제일 낮은곳에 옮기는 작업 => 최고점-1, 최저점+1

처음엔 문제 그대로 최고점을 찾고 최저점을 찾은 뒤 값을 1씩 줄이고 늘렸다.

하지만 Arrays.sort를 사용하면 오름차순으로 정렬되기 때문에 더욱 간편하게 코드를 짤 수 있다.

 

문제 그대로 구현하는것이 아니라,

문제를 충분히 분석하고 어떻게 풀어나가야 할지 많이 고민을 해보고 코드를 구현해야겠다는 생각이 든 문제! 

 

import java.util.Arrays;
import java.util.Scanner;

public class swea1208_flatten {

	public static void main(String[] args) {

		int tc = 10;
		Scanner sc = new Scanner(System.in);
		for (int t = 0; t < tc; t++) {
			int count = sc.nextInt();
			int[] arr = new int[100];	//가로의 길이는 100으로 항상 정해져있다.

			for (int i = 0; i < 100; i++)
				arr[i] = sc.nextInt();	//input값 받아오기

			Arrays.sort(arr);	//배열정렬
			for (int i = 0; i < count; i++) {		//제한횟수만큼 dump실행
				arr[0]++;		//최저점 +1
				arr[99]--;		//최고점 -1 

				Arrays.sort(arr);	//재정렬
			}
			System.out.printf("#%d %d\n", t + 1, arr[99] - arr[0]);	//최저와 최고 차의 출력
		}
	}

}

 

728x90

댓글