Computer Science/Problem Solving (PS)

[BOJ_1812 | Math] 사탕

여울코딩 2019. 2. 10. 14:32

save image




풀이






깔끔한 수학 구현 문제였다. 입력케이스의 개수가 홀수 개여서 복잡하게 머리를 굴리지 않아도 된다.

문제를 해결하는 기본 원리는 다음과 같다.

입력으로 들어오는 모든 숫자들을 더한다음 2로 나누면, 1~N까지의 학생들이 가지고 있는

모든 사탕의 수가 나오게 된다.

(왜냐하면 모든 수를 다 두 번씩 더하기 때문 1+2 2+3 3+1)


거기에 지금 구하고자 하는 학생을 제외한 나머지 학생들의 사탕의 개수들의 합을 빼주면

지금 구하고자 하는 학생의 사탕의 개수가 나오게 된다.


1 = (1+2+3) - (2+3)

2 = (1+2+3) - (3+1)

3 = (1+2+3) - (1+2)


이 식을 N에 대해 일반화하면 금방 정답을 구할 수 있다. 







소스 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.*;
public class BOJ_1812 {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int[] nextSum = new int[n];
        int sum = 0;
        for(int i=0;i<n;i++){
            nextSum[i] = input.nextInt();
            sum += nextSum[i];
        }sum/=2;
 
        for(int i=0;i<n;i++){
            int cnt = i%2int val = sum;
            if(i<2) cnt = i+1;
            while(true){
                if(cnt>=n) break;
                if(cnt==i) {cnt++continue;}
                val -= nextSum[cnt];
                cnt+=2;
            }
            System.out.println(val);
        }
    }
}
 
cs

반응형