문제:
https://www.acmicpc.net/problem/26215
26215번: 눈 치우기
집 2와 집 3 앞의 눈을 치우고, 집 2와 집 3 앞의 눈을 치우고, 집 1과 집 3 앞의 눈을 치운 뒤 집 3 앞의 눈을 두 번 치우면 5분만에 모든 집 앞의 눈을 치울 수 있다.
www.acmicpc.net
코드:
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 집의 수
Integer [] tmp = new Integer[n]; // 눈의 양 배열
for(int i=0;i<n;i++){
tmp[i] = sc.nextInt();
}
// 내림차 순 정렬
Arrays.sort(tmp, Comparator.reverseOrder());
// 걸리는 시간
int time = 0;
while(true){
if(tmp.length == 1) break; // 길이가 하나일 경우 따로 처리
if(tmp[1] != 0){
// 내림차 순으로 했을 때 2번째집에 눈이 있다면
// 두 집씩 눈 제거
tmp[0] -= 1;
tmp[1] -= 1;
time++;
}else{
// 1번째 집에만 눈이 있는 경우
if(tmp[0] != 0){
tmp[0] -= 1;
time++;
}
}
/*
// 확인용
for(int i=0;i<n;i++){
System.out.print(tmp[i]+" ");
}
System.out.println();
*/
// 내림차 순 정렬
Arrays.sort(tmp, Comparator.reverseOrder());
// 눈이 다 지워진 경우 탈출
if(tmp[0] == 0) break;
}
if(tmp.length == 1){
if(tmp[0] > 1440){
System.out.println(-1);
} else{
System.out.println(tmp[0]);
}
}else{
if(time > 1440){
System.out.println(-1);
}else{
System.out.println(time);
}
}
}
}
무지성으로 하니 코드가 깔끔하지 않음..
내림차 순 정렬을 반복문 내에서 처음에 하지않고 나중에 하는 이유는
눈의 양이 모두 2인 5개 집의 눈을 치우자고 할 때
2 2 2 2 2
1 1 2 2 2 // 처음 두 집 제거
2 2 2 1 1 // 내림차 순 정렬
1 1 2 1 1 // 처음 두 집 제거
2 1 1 1 1 // 내림차 순 정렬
1 0 1 1 1 // 처음 두 집 제거
1 1 1 1 0 // 내림차 순 정렬
0 0 1 1 0 // !!! 예외 발생
// 내림차 순 정렬을 아래서 하지 않으면
// 이 상황에서 반복문을 탈출하게 됨
'Java > 백준' 카테고리의 다른 글
[Java][2133] 타일 채우기 (0) | 2022.12.31 |
---|---|
[Java][25955] APC는 쉬운 난이도 순일까, 아닐까? (0) | 2022.12.29 |
[Java][2506] 점수계산 (0) | 2022.12.15 |
[Java][2217] 로프 (0) | 2022.11.19 |
[Java][10942] 팰린드롬? (0) | 2022.11.17 |