[백준] 11021번 : A+B - 7 - [C++]
- 문제
이 번 문제는 별로 어려울 게 없다.
- 알고리즘 [접근 방법]
뭐.. 아마 대부분은 쉽게 풀었을 것이다.
만약 A+B 문제를 처음 접한다면 다음 글을 읽고 오시면 도움이 될 것이다.
우리가 이 번 문제에서 고려해야 할 점은 두 가지다.
1. 두 정수의 덧셈을 출력해야 한다는 점
2. 매 출력시 "Case #N: " 이 붙는다는 점 (T는 테스트 케이스)
이 때, 문제에서 테스트케이스 번호는 1부터 시작한다고 했으니 N은 1부터 시작할 것이다.
즉, 반복문으로 작성하면 1부터 입력받은 T까지 반복해야 한다는 점이다.
for(int i = 1; i <= T; i++) {
//... code ... //
}
일단 반복문 구조를 반들었으니, 두 정수를 입력받아야하지 않겠는가? 즉, 다음과 같이 입력받으면 된다.
for(int i = 1; i <= T; i++) {
int a;
int b;
cin >> a >> b;
}
위와 같이 a와 b에 두 정수를 입력 받았으면, 이제 출력을 해야한다.
일단, 출력 형태를 보면 Case #N: sum(a+b) 형태다.
그럼 일관되게 출력하려면 어떻게 해야 할까?
Case #N 에서 N는 1부터 T값까지 1씩 증가하면서 출력 되는 것을 볼 수 있다. 즉, 이는 반복문의 i값과 일치하기 때문에, N은 i값으로 대체하여 출력하면 된다.
그 다음에 앞서 입력받은 두 정수 a, b를 더한 값을 출력한 뒤 마지막으로 개행(줄바꿈)을 해주면 되지 않겠는가?
코드로 보자면 다음과 같다.
for(int i = 1; i <= T; i++) {
int a;
int b;
cin >> a >> b;
cout << "Case #" << i << ": " << a + b << "\n"; //(또는 endl;)
}
즉, 위와같이 하면 모두 끝난다.
이를 토대로 출력만 해주면 된다.
- 2가지 방법을 사용하여 풀이한다.
이 전에 빠른 A+B를 풀어보셨다면 알겠지만, C++는 입출력이 기본적으로 C의 기본 입출력과 동기화 되어있어서 상대적으로 느리다. 그래서 두 io의 동기화를 끊어주고, 입력과 출력 묶음을 풀어주면 성능적으로 이득을 볼 수 있지만, 아직 익숙치 않은 분들도 계실 것 같아 일반적인 방법과 입출력 향상 방법 이렇게 두 가지 방법을 보여주고자 한다.
알고리즘 자체는 위 내용을 그대로 적용하면 된다.
1. 기본 입출력
2. 향상된 입출력
- 풀이
- 방법 1 : [기본 입출력]
#include <iostream>
using namespace std;
int main(int argc, char const *argv[]) {
int T;
cin >> T; // 테스트 케이스
for (int i = 1; i <= T; i++) {
int a;
int b;
cin >> a >> b;
cout << "Case #" << i << ": " << a + b << "\n"; //(또는 endl;)
}
return 0;
}
가장 기본적인 방법이라 할 수 있겠다.
그렇게 어려울 건 없을 것이다. 다만 유의 할 점으 : 다음 공백이 있어야한다는 점이다. 그 것만 조심하도록 하자.
- 방법 2 : [향상된 입출력]
앞서 말했듯, C와 C++의 표준 입출력 동기화를 끊어주고, 입력과 출력 또한 묶여있는 것을 끊어주는 방법이다.
이 방법을 잘 모른다면 다음 글을 참고하시길 바란다.
#include <iostream>
using namespace std;
int main(int argc, char const *argv[]) {
ios_base::sync_with_stdio(false); // 두 표준 입출력 동기화 해제
cin.tie(NULL); // 입력과 출력이 묶여있는 것을 풀어준다.
int T;
cin >> T; // 테스트 케이스
for (int i = 1; i <= T; i++) {
int a;
int b;
cin >> a >> b;
cout << "Case #" << i << ": " << a + b << "\n";
}
return 0;
}
크게 어려울 것은 없을 것이다.
- 성능
채점 번호 : 28736772 - 방법 2 : 향상된 입출력
채점 번호 : 28736770 - 방법 1 : 기본 입출력
위 이미지에서 보이듯, 시간이 단축되는 것을 확인 할 수 있다.
- 정리
이 번 문제는 어려울 것이 없었을 것이다.
반복문의 특성만 알아도 쉽게 풀 수 있는 문제이기 때문에 크게 설명할 것도 없었다. 혹여 어렵거나 이해가 안되는 부분이 있다면 댓글 남겨주시면 빠르게 답변드리도록 하겠다.
'C++ - 백준 [BAEK JOON] > 반복문' 카테고리의 다른 글
[백준] 2438번 : 별 찍기 - 1 - [C++] (0) | 2021.05.08 |
---|---|
[백준] 11022번 : A+B - 8 - [C++] (0) | 2021.05.02 |
[백준] 15552번 : 빠른 A+B - [C++] (6) | 2021.03.28 |
[백준] 8393번 : 합 - [C++] (0) | 2021.03.26 |
[백준] 10950번 : A+B - 3 - [C++] (5) | 2021.03.22 |