[SWEA]13736번: 사탕분배
❓문제
나연이는 A개의 사탕을, 다현이는 B개의 사탕을 갖고 있다. 두 사람은 아래와 같은 작업을 정확히 K번 반복하려고 한다.
- 둘 중 사탕의 개수가 더 적은 사람을 X, 더 많은 사람을 Y라고 하자. 단, 두 사람이 같은 개수의 사탕을 갖고 있다면 나연이가 X, 다현이가 Y이다.
- X가 P개의 사탕을, Y가 Q개의 사탕을 갖고 있을 때, Y는 X에게 자신의 사탕 P개를 준다. 결과적으로 X가 가진 사탕은 2P개, Y가 가진 사탕은 Q-P개가 된다. 작업이 끝나고 난 후, 두 사람이 각각 가지고 있는 사탕의 개수를 A’,B’라고 하자. min(A’,B’)의 값은 얼마일까?
✏️입력
첫 번째 줄에 테스트 케이스의 수 T가 주어진다. 각 테스트 케이스는 하나의 줄로 이루어지며, 각 줄에는 세 개의 정수 A,B,K (1≤A,B≤109, 1≤K≤2⋅109)가 공백 하나를 사이로 두고 주어진다.
📜출력
각 테스트 케이스마다, K번의 반복 작업이 끝나고 난 후, 두 사람이 각각 가지고 있는 사탕의 개수를 A’,B’라고 할 때, min(A’,B’ )의 값을 한 줄에 하나씩 출력한다.
💻코드
/*
13736번 : 사탕분배
언어 : C++
알고리즘)
1. 일단 테스트케이스 입력받고 -> for문으로 돌릴것
2. a,b,l 입력받고
3. for문으로 l번 돌린다
4. X = 2X, Y = Y-X 한 후 두수 크기 비교
5. min(); 출력
*/
#include<iostream>
using namespace std;
int main(){
int TestCase;
int X, Y, L;
int tmp;
cin >> TestCase;
int * res = new int[TestCase];
for (int i = 0; i < TestCase; i++) {
cin >> X >> Y >> L;
for (int j = 0; j < L; j++) {
if (X > Y) {
tmp = Y;
Y = X;
X = tmp;
}
Y = Y - X;
X = 2 * X;
}
res[i] = min(X, Y);
}
for (int i = 0; i < TestCase; i++)
{
cout << "#" << i+1 << " " << res[i] << endl;
}
}
- 호기롭게 코딩했으나 결과는 FAIL
- 문제는 제한시간 초과!
해당 문제는 150개의 테스트를 c++기준 1초의 시간을 통과 기준으로 하고있다. - 아니 이거 어케 해? 아무래도 일단 출력 값은 맞도록 코딩 된거같은데, 제한시간이 문제인데.. 인라인 함수 써봤자 딱히..for문은 무조건 2번은 돌아야할 것 같고 아무래도 다른 방법을 찾아야하는건가. 내가 너무 투박하게 1차원적으로 코딩한거같긴 한데..