코딩테스트/BOJ

[BOJ] 3060 욕심쟁이 돼지 - JAVA

5월._. 2022. 2. 18.
728x90

1. 문제

https://www.acmicpc.net/problem/3060

 

3060번: 욕심쟁이 돼지

입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 두 줄로 구성되어 있고, 첫째 줄에는 하루에 배달되는 사

www.acmicpc.net

돼지는 원형 식탁에 앉아서 식사를 한다. 현수의 돼지들은 기억력이 뛰어나기 때문에 전 날 자신의 양쪽과 맞은편에 앉았던 돼지가 먹었던 양을 기억하고 있다. 또, 욕심도 많기 때문에, 그 만큼의 양을 추가하여 식사를 하기를 원한다.

매일 현수의 집에 신선한 사료가 N만큼 배달된다.

첫 날 돼지들이 먹었던 양이 주어졌을 때, 현수가 6마리의 돼지들의 요구를 들어줄 수 없게 되는 날이 몇 번째 날인지 구하는 프로그램을 작성하시오.


2. 풀이

처음에 queue로 풀려고 하다가 맞은 편 돼지 양도 세야되는 걸 깨닫고 list로 변경했다. 그런데 생각해보니 돼지가 매일 먹게 되는 양은 전날의 총합-(나+2자리돼지)-(나+4자리돼지)였다. 여섯마리의 돼지가 이런 식으로 먹는다고 하면 하루에 드는 사료양은 전날*6-전날*2 = 전날*4가 된다.

그래서 사료양이 N보다 크기 직전까지 sum에 4를 곱하고, 결과에 하루를 더해주었다.

import java.io.*;
import java.util.*;

public class BOJ_3060_욕심쟁이돼지 {
    public static void main(String[] args) throws Exception {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        StringBuilder sb = new StringBuilder();

        int T = Integer.parseInt(in.readLine());

        for(int tc=0;tc<T;tc++){
            int N = Integer.parseInt(in.readLine());
            st = new StringTokenizer(in.readLine());

            int day = 1;
            long sum = 0;

            for(int i=0;i<6;i++) sum += Integer.parseInt(st.nextToken());


            while(sum<=N) {
                sum *= 4;
                ++day;
            }


            sb.append(day).append("\n");
        }

        System.out.print(sb);
    }
}

3. 결과

'코딩테스트 > BOJ' 카테고리의 다른 글

[BOJ] 1063 킹 - JAVA  (0) 2022.02.20
[BOJ] 15683 감시 - JAVA  (0) 2022.02.20
[BOJ] 3085 사탕게임 - JAVA  (0) 2022.02.18
[BOJ] 1987 알파벳 - JAVA  (0) 2022.02.18
[BOJ] 3109 빵집 - JAVA  (0) 2022.02.18

댓글