최근 어떤 동영상 플랫폼에서 P채널과 T채널이 구독자 수 1위를 놓고 치열한 경쟁을 벌이고 있다.
영은이는 자신의 주위 사람들은 어떤 채널을 구독하고 있을지 궁금해하여, N명의 사람들에게 아래 두 질문을 하였다.
- P채널을 구독하고 있나요?
- T채널을 구독하고 있나요?
그 결과, A명이 1번 질문에 ‘네’라고 답했고, B명이 2번 질문에 ‘네’라고 답했다.
이때, P채널과 T채널 모두 구독하고 있는 사람들이 최소 몇 명, 최대 몇 명인지 구하는 프로그램을 작성하라.
[입력]
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 세 개의 정수 N (1 ≤ N ≤ 100), A, B (0 ≤ A, B ≤ N)이 공백 하나를 사이로 두고 순서대로 주어진다.
[출력]
각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고,
P채널과 T채널 모두 구독하고 있는 사람의 수의 최댓값과 최솟값을 공백 하나를 사이로 두고 차례대로 출력한다.
[푸는 TIP]
각 분기를 if문으로 모두 나눠버려서 빈틈없이 해결하도록 한다.
[소스 코드]
#include <stdio.h>
int main(void)
{
int test_case;
int T;
int N, A, B;
int max, min;
setbuf(stdout, NULL);
scanf("%d", &T);
for (test_case = 1; test_case <= T; ++test_case)
{
scanf("%d %d %d", &N, &A, &B);
if (A == B && B == N) {
max = min = A;
}
else if (A == N) {
max = min = B;
}
else if (B == N) {
max = min = A;
}
else {
if (A+B <= N) {
min = 0;
if (A > B) {
max = B;
}
else if (A < B) {
max = A;
}
else if(A == B) {
max = A;
}
}
else { //A+B가 N보다 클경우
min = A + B - N;
if (A > B) {
max = B;
}
else if (A < B) {
max = A;
}
else if (A == B) {
max = A;
}
}
}
printf("#%d %d %d\n", test_case, max, min);
}
return 0; //정상종료시 반드시 0을 리턴해야 합니다.
}
[느낀 점]
SW expert academy에서 거의 처음 푼 문제인데, 테스트 케이스 통과를 못해서 너무 화났지만 계속 논리적으로 빈틈을 찾아보니 빈틈없이 잘 풀 수 있게 되었다.
[문제 링크]
'코딩 테스트 연습 > SW Expert Academy' 카테고리의 다른 글
[SW Expert Academy] 9843번 : 촛불 이벤트 (0) | 2020.07.30 |
---|