본문 바로가기
코딩 테스트/[JAVA] 백준

[JAVA] 백준 2547번 사탕 선생 고창영 | BOJ 자바

by M개발자 2022. 3. 18.
반응형

사탕 선생 고창영

 

사탕 박사 고창영은 사탕 공장을 그만 두고 초등학교 선생님으로 취직했다.

오늘은 창영이네 반 학생들과 소풍을 가는 날이다. N명의 학생은 모두 가방에 사탕을 가득 담아왔다.

그런데, 사탕을 많이 가져온 학생들이 사탕을 적게 가져온 학생들을 놀리기 시작했다.

창영이는 "얘들아~ 그러면 안되지ㅜㅜ 사탕을 모두 여기에 가져와보렴. 선생님이 공평하게 나눠줄게"

창영이는 모든 학생들이 같은 사탕을 가지게 하려고 한다.

이것이 가능한 일일까?


예제 입출력

 

입력 출력
2 // 2번의 테스트 코드

5 // 1번 테스트 코드에서 5개의 입력 받음

2
7
3
8

6 // 2번 테스트 코드에서 6개의 입력 받음
7
11
2
7
3
4
11110

 

 


코드

 

1. 테스트 케이스 수 t 입력 받기

 

2. t 만큼 for문 반복

 

3. 테스트 케이스의 사람 수 입력받기

int n : 테스트 케이스의 사람 수

BigInteger sum : 사탕 개수를 더할 변수   |   조건 학생들이 가져온 사탕 개수의 합은 10^18을 넘어갈 수 있다로 int형을 넘는다.

 

4. 사탕 수 더하기

BigInteger 메소드 add를 사용하여 입력받은 사탕 수를 sum 변수에 더한다.

 

5. 사탕 수가 사람 수의 배수인지 판별하기

String reminder = String.valueOf(sum.remainder(BigInteger.valueOf(n)));

→ sum이 int형이었을 경우 String reminder = Integer.toString(sum % n); 와 같다. 

BigInteger 메소드인 나머지를 구하는 remainder를 사용하여 나머지값을 구했다.

 

1. 사탕 수를 균등하게 분배할 수 있는지에 따라 출력

나머지가 0이 아닐 경우 사탕 수를 균등하게 분배하지 못한다. 

따라서 reminder가 0이면 "YES"를 0이 아니면 "NO"를 출력한다.

 

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int t = scanner.nextInt();

        for (int i = 0; i < t; i++) {
            int n = scanner.nextInt();
            BigInteger sum = new BigInteger("0");
            
            for (int j = 0; j < n; j++) {
                sum = sum.add(scanner.nextBigInteger());
            }
            
            String reminder = String.valueOf(sum.remainder(BigInteger.valueOf(n)));
            if (reminder.equals("0")) System.out.println("YES");
            else System.out.println("NO");
            
        }
    }

 

 

반응형

댓글