코딩테스트/백준

[백준]3060번 욕심쟁이 돼지 - Java

GAEBAL 2022. 2. 27. 23:27
728x90

문제

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

 

3060번: 욕심쟁이 돼지

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

www.acmicpc.net

 

풀이

처음에 문제를 읽었을 때는 원형큐를 구현해야하나 했는데 그냥 배열로 해도 되겠다 싶어서 배열로 했음

 

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

for (int i = 0; i < arr.length; i++) {
    arr[i] = tempArr[i] + tempArr[(i + 1) % 6] + tempArr[(i + 5) % 6] + tempArr[(i + 3) % 6];
}

이 부분이 포인트인 것 같다.

 

arr[] - 돼지들의 먹이 배열
tempArr[] - 돼지들의 먹이 복사 배열?
처음엔 둘이 똑같이 해놓고 하루가 지날때마다
tempArr[]에서 계산해서 arr[]에 다음날 먹이로 최신화시켜주고
최신화가 다 되면 tempArr[]를 arr[]랑 똑같이 최신화시켜줌

minus() - 돼지들한테 먹이 주는 함수
먹이를 나눠줘보고 먹이가 음수면 그날은 먹이를 못주는거니까 day를 출력

먹이 total은 하루가 지나면 폐기하므로 하루가 지나서 먹이를 나눠줄 때마다 tempTotal에 total을 넣어줌

 

코드

// 3060번 욕심쟁이 돼지
// https://www.acmicpc.net/problem/3060

package BAEKJOON;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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

        int T = Integer.parseInt(br.readLine());
        for (int t = 1; t <= T; t++) {
            int total = Integer.parseInt(br.readLine());
            int day = 0;
            int[] arr = new int[6];
            int[] tempArr = new int[6];
            st = new StringTokenizer(br.readLine());
            for (int i = 0; i < arr.length; i++) {
                arr[i] = Integer.parseInt(st.nextToken());
                tempArr[i] = arr[i];
            }

            while (true) {
                int tempTotal = minus(total, arr);
                day++;
                for (int i = 0; i < arr.length; i++) {
                    arr[i] = tempArr[i] + tempArr[(i + 1) % 6] + tempArr[(i + 5) % 6] + tempArr[(i + 3) % 6];
                }
                for (int i = 0; i < arr.length; i++) {
                    tempArr[i] = arr[i];
                }
                if (tempTotal < 0) {
                    break;
                }
            }

            sb.append(day).append("\n");
        }
        sb.setLength(sb.length() - 1);
        System.out.println(sb);
    }

    public static int minus(int total, int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            total -= arr[i];
        }
        return total;
    }
}
728x90