https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV139KOaABgCFAYh
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
[제약 사항]
가로 길이는 항상 100으로 주어진다.
모든 위치에서 상자의 높이는 1이상 100이하로 주어진다.
덤프 횟수는 1이상 1000이하로 주어진다.
주어진 덤프 횟수 이내에 평탄화가 완료되면 더 이상 덤프를 수행할 수 없으므로 그 때의 최고점과 최저점의 높이 차를 반환한다 (주어진 data에 따라 0 또는 1이 된다).
[입력]
총 10개의 테스트 케이스가 주어지며, 각 테스트 케이스의 첫 번째 줄에는 덤프 횟수가 주어진다. 그리고 다음 줄에 각 상자의 높이값이 주어진다.
[출력]
#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스의 최고점과 최저점의 높이 차를 출력한다.
import java.util.Arrays;
import java.util.Scanner;
public class flatten {
private static int dump(int num, int[] arr) {
Arrays.sort(arr);
//종료 조건1: 덤프 횟수 끝나면 최대 높이와 최소높이 차이 return
//종료 조건2: 덤프 횟수 이내에 평탄화가 완료되면 더이상 덤프 수행x
if(num == 0|| arr[arr.length-1]-arr[0]<=1)
return arr[arr.length-1]-arr[0];
//반복
arr[arr.length-1]-=1; //가장 높은 곳 -1
arr[0]+=1; //가장 낮은 곳 +1
Arrays.sort(arr);
return dump(num-1, arr);//dump횟수 -1하고 다시 부르기
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int dump_n;
int[] arr;
StringBuilder sb = new StringBuilder();
//입력부
for(int i = 0; i < 10; i++) {
dump_n = sc.nextInt();
arr = new int[100];
for(int j = 0; j < 100; j++) {
arr[j] = sc.nextInt();
}
sb.append("#"+(i+1)+" "+dump(dump_n, arr)+"\n");
}
//출력부
System.out.println(sb);
}
}
재귀함수를 이용해 상자의 높이를 평탄화하였습니다.
*dump(int num int[][] arr)
-매개변수
int num = 수행가능한 dump 횟수
int[][] arr = dump를 실행할 대상 배열
-종료조건
⑴ 종료 조건: 덤프 횟수 끝나면 최대 높이와 최소높이 차이를 return
⑵ 종료 조건: 덤프 횟수 이내에 평탄화가 완료되면 더이상 덤프 수행x
-동작
//정렬을 미리 수행하면 최솟값, 최댓값을 찾기위한 코드를 작성하지 않고 배열의 양 끝값만 고려할 수 있습니다.
Arrays.sort(arr) = dump에 들어온 arr를 오름차순 정렬하여 제일 높은 상자의 높이 = 배열의 끝 원소값, 제일 낮은 상자의 높이 = 배열의 첫 원소값
arr[arr.length-1]-=1; //가장 높은 곳 -1
arr[0]+=1; //가장 낮은 곳 +1
Arrays.sort(arr);
return dump(num-1, arr);//dump횟수 -1하고 다시 dump 재귀함수 호출
'문제해결 > SWExpertAcademy' 카테고리의 다른 글
SWExpertAcademy 2001번-파리 퇴치(JAVA) (1) | 2021.08.04 |
---|---|
SWExpertAcademy 2805번-농작물 수확하기(JAVA) (0) | 2021.08.04 |
SWExpertAcademy 1873번-상호의 배틀필드(JAVA) (0) | 2021.08.04 |
SWExpertAcademy 1210번-Ladder(JAVA) (0) | 2021.08.03 |
SWExpertAcademy 1954번-달팽이 숫자(JAVA) (0) | 2021.08.03 |