일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
27 | 28 | 29 | 30 |
- ML
- Game Data Analysis
- AA test
- datascience
- 자료구조
- Python
- 중앙갑
- 정렬
- 큐
- 백준
- Journal Review
- 그리디
- cs231n
- Anti Cheat
- 딥러닝
- BFS
- Stack
- 스택
- classification
- 구현
- c++
- anomaly detection
- 7569번
- Queue
- Machine learning
- Deeplearning
- p-value
- 통계
- DP
- 알고리즘
- Today
- Total
Software Hyena::
[백준 3060번] - 욕심쟁이 돼지 / C++ 본문
www.acmicpc.net/problem/3060
3060번: 욕심쟁이 돼지
입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 두 줄로 구성되어 있고, 첫째 줄에는 하루에 배달되는 사
www.acmicpc.net
문제
유명한 농부 박현수는 돼지 6마리를 키우고 있다. 그는 하루에 한 번씩 돼지에게 맛있는 밥을 준다.
돼지는 원형 식탁에 앉아서 식사를 한다. 현수의 돼지들은 기억력이 뛰어나기 때문에 전 날 자신의 양쪽과 맞은편에 앉았던 돼지가 먹었던 양을 기억하고 있다. 또, 욕심도 많기 때문에, 그 만큼의 양을 추가하여 식사를 하기를 원한다.
예를 들어, 현수가 1번부터 6번까지 돼지에게 각각 3, 2, 7, 1, 5, 4만큼 밥을 주었다면, 2번 돼지는 첫 날 받은 양 2에다 양쪽과 맞은편 돼지가 받은 양 15(3+7+5)만큼을 더해 17만큼 받기를 원한다.
마음씩 좋은 농부 박현수는 이런 돼지의 요구를 모두 들어주려고 한다. 매일 현수의 집에 신선한 사료가 N만큼 배달된다. 사료의 유통기한은 하루이기 때문에, 남은 사료는 모두 폐기한다.
첫 날 돼지들이 먹었던 양이 주어졌을 때, 현수가 6마리의 돼지들의 요구를 들어줄 수 없게 되는 날이 몇 번째 날인지 구하는 프로그램을 작성하시오.

입력
입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터는 두 줄로 구성되어 있고, 첫째 줄에는 하루에 배달되는 사료의 양 N (1<=N<=500,000,000)이 주어진다. 그 다음 줄에는 1, 2, 3, 4, 5, 6번 돼지가 첫 날 먹었던 식사의 양이 빈 칸을 사이에 두고 차례대로 주어진다. 첫째 날에 각 돼지가 먹는 사료의 양은 100이하의 자연수이다.
출력
각 테스트 데이터에 대해, 6마리 돼지의 요구를 모두 들어줄 수 없게 되는 날이 몇 번째 날인지 출력한다.
-----------------------------------------------------------------------------------------------------
풀이
<C++>
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int T;
cin >> T;
for (int i = 0; i < T; ++i) {
int N;
cin >> N;
int num;
int day = 0;
int total_food = 0;
for (int j = 1; j < 7; ++j) {
cin >> num;
total_food += num;
}
int times = 1;
while (true) {
++day;
if (N - (total_food * times) < 0) {
break;
}
times *= 4;
}
cout << day << '\n';
}
return 0;
}
돼지가 요구하는 사료의 총 양은, 전날 요구한 사료의 양의 총합의 4배가 되는 것을 파악하면, 쉽게 풀 수 있는 문제이다.
1. T를 입력한다.
2. N을 입력받고, 첫날 사료의 양을 입력받아 합을 저장한다.
3. 날이지날수록, 요구하는 사료의 양을 4배를 해주고, N이 요구하는 사료의 양보다 작아질 경우 while문을 탈출한다.
4. while 문을 돌면서 연산해준 day의 값을 출력한다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준 1422번] - 숫자의 신 / C++ (0) | 2021.02.24 |
---|---|
[백준 11651번] - 좌표 정렬하기 2 / C++ (0) | 2021.02.24 |
[백준 2941번] - 크로아티아 알파벳 / C++ (예외 발견) (0) | 2021.02.23 |
[백준 2435번] - 기상청 인턴 신현수 / C++ (0) | 2021.02.23 |
[백준 2417번] - 정수 제곱근 / C++ (0) | 2021.02.23 |