코딩테스트/백준
[백준-자바] 10539번 사과나무 / 2022.05.17
강원대목동녀
2022. 5. 17. 16:01
https://www.acmicpc.net/problem/19539
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader((new InputStreamReader(System.in)));
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int N = Integer.parseInt(stringTokenizer.nextToken()); // 수의 개수
ArrayList<Integer> tree = new ArrayList<>();
stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int hap = 0; // 나무 길이의 합
int count = 0; // 2를 뿌릴 수 있는 횟수
for(int i=0; i<N; i++){
int water = Integer.parseInt(stringTokenizer.nextToken());
count += water/2; // 2로 나눈 몫은 2로 뿌릴 수 있는 횟수를 말함
hap += water; // 나무 길이의 합
}
if(hap%3!=0){ // 나무 길이의 합이 3으로 나누어 떨어지지 않으면
System.out.println("NO"); // 만들 수 없음
} else { // 나무 길이의 합이 3으로 나누어 떨어지고
hap = hap / 3; // 3으로 나눈 몫을 3으로 뿌릴 수 있는 횟수
if(count>=hap) // 2를 뿌릴 수 있는 횟수가 3으로 뿌릴 수 있는 횟수 이상이여야 함
System.out.println("YES");
else
System.out.println("NO");
}
}
}
풀이 :
원하는 높이가 되도록 물뿌리개를 뿌리려면?
1) 나무 길이의 합이 3으로 나누어 떨어져야 함
2) 2를 10번 뿌리면 1도 10번 뿌려야 함 -> 각 길이를 입력받을 때 2를 뿌릴 수 있는 수를 count 해준다.
3) 이 count 값이 나무 길이의 합을 3으로 나눈 몫보다 크거나 같아야 한다. (2를 적어도 hap/3 이상 뿌려야된다는 뜻)
4) 만약 count값이 나무 길이의 합을 3으로 나눈 몫보다 크다면? 넘치는 값은 자동으로 1로 나누어서 뿌려짐