1208_Flatter
문제유형: 배열
사용언어: 자바
열: 2021년 2월 2일
문제 링크
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 |