728x90
문제
https://www.acmicpc.net/problem/3060
풀이
처음에 문제를 읽었을 때는 원형큐를 구현해야하나 했는데 그냥 배열로 해도 되겠다 싶어서 배열로 했음
현수의 돼지들은 기억력이 뛰어나기 때문에 전 날 자신의 양쪽과 맞은편에 앉았던 돼지가 먹었던 양을 기억하고 있다. 또, 욕심도 많기 때문에, 그 만큼의 양을 추가하여 식사를 하기를 원한다.
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