문제 링크입니다: https://www.acmicpc.net/problem/11006
간단한 수학 문제였습니다.
알고리즘은 아래와 같습니다.
1. 두 다리가 모두 있는 닭의 최대 개수는 lower_bound(다리의 수 / 2)마리입니다.
2. 따라서 1에서 구한 값부터 반복문을 돌리면서 조건이 맞는지 확인합니다.
3. 조건이 맞으면 반복문을 탈출하고 다리가 한 개인 닭과 다리가 두 개인 닭의 마리 수를 출력합니다.
#include <iostream>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0); //cin 실행속도 향상
int test_case;
cin >> test_case;
for (int t = 0; t < test_case; t++)
{
int N, M;
cin >> N >> M;
int twoLegs = N / 2;
int oneLeg;
while (1)
{
//(M - twoLegs)가 결국 다리가 한 개인 닭 마리 수
if ((M - twoLegs) + twoLegs * 2 == N)
{
oneLeg = M - twoLegs;
break;
}
twoLegs--;
}
cout << oneLeg << " " << twoLegs << "\n";
}
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 11009번 Drinks (0) | 2018.07.29 |
---|---|
백준 11008번 복붙의 달인 (0) | 2018.07.29 |
백준 13900번 순서쌍의 곱의 합 (0) | 2018.07.29 |
백준 11003번 최소값 찾기 (0) | 2018.07.28 |
백준 11007번 Inverse Move-to-Front Transform (4) | 2018.07.28 |