https://www.acmicpc.net/step/3
for문 단계
1부터 N까지의 합을 구하는 문제. 물론 반복문 없이 풀 수도 있습니다.
www.acmicpc.net
https://www.acmicpc.net/problem/2739
2739번: 구구단
N을 입력받은 뒤, 구구단 N단을 출력하는 프로그램을 작성하시오. 출력 형식에 맞춰서 출력하면 된다.
www.acmicpc.net
방법 1
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 1; i < 10; i++)
cout << n << " * " << i << " = " << n*i << endl;
return 0;
}
방법 2
#include <stdio.h>
int main() {
int N;
scanf("%d", &N);
for (int i = 1; i < 10; i++) {
printf("%d * %d = %d\n", N, i, N * i);
}
return 0;
}
https://www.acmicpc.net/problem/10950
10950번: A+B - 3
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
www.acmicpc.net
방법 1
#include <iostream>
using namespace std;
int main() {
int T, A, B;
cin >> T;
for (int i = 0; i < T; i++) {
cin >> A >> B;
cout << A + B << endl;
}
return 0;
}
방법 2
#include <stdio.h>
int main() {
int T, A, B;
scanf("%d", &T);
for (int i = 0; i < T; i++) {
scanf("%d %d", &A, &B);
printf("%d\n", A+B);
}
return 0;
}
https://www.acmicpc.net/problem/8393
8393번: 합
n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.
www.acmicpc.net
방법 1
#include <iostream>
using namespace std;
int main() {
int N, e=0;
cin >> N;
for (int i = 1; i <= N; i++)
e += i;
cout << e << endl;
return 0;
}
방법 2 수식
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
cout << N*(N+1)/2 << endl;
return 0;
}
방법 3
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
printf("%d", n*(n+1)/2);
return 0;
}
https://www.acmicpc.net/problem/15552
15552번: 빠른 A+B
첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.
www.acmicpc.net
방법 1
#include <iostream>
using namespace std;
int main() {
cin.tie(NULL);
ios::sync_with_stdio(false);
int N, A, B;
cin >> N;
for (int i = 0; i < N; i++) {
cin >> A >> B;
cout << A + B << "\n";
}
return 0;
}
C 혹은 C++에서 scanf, printf 사용 : 빠름
cin, cout은 상대적으로 느림
cin.tie(NULL);
cin으로 데이터 읽을 때 출력 버퍼를 비우지 않고 입력을 받음
ios::sync_with_stdio(false);
=> C와 C++의 버퍼 분리
endl은 개행뿐 아니라 버퍼를 비우는 작업도 함 - 느림
https://st-lab.tistory.com/232
[백준] 15552번 : 빠른 A+B - [C++]
www.acmicpc.net/problem/15552 15552번: 빠른 A+B 첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다. www.acmi..
st-lab.tistory.com
https://www.acmicpc.net/problem/2741
2741번: N 찍기
자연수 N이 주어졌을 때, 1부터 N까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.
www.acmicpc.net
방법 1
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
for (int i = 1; i <= N; i++)
cout << i << "\n"; // endl 방법은 시간 초과
}
endl은 개행뿐 아니라 버퍼를 비우는 작업도 함 - 느림
방법 2
#include <iostream>
#include <string>
using namespace std;
int main() {
int N;
cin >> N;
string s = "";
for (int i = 1; i <= N; i++)
s += to_string(i) + "\n";
cout << s;
}
방법 3
#include <cstdio> // 혹은 #include <stdio.h>
int main(){
int N;
scanf("%d", &N);
for(int i=0; i<N; i++)
printf("%d\n", i+1);
return 0;
}
https://www.acmicpc.net/problem/2742
2742번: 기찍 N
자연수 N이 주어졌을 때, N부터 1까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.
www.acmicpc.net
방법 1
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
for (int i = N; i > 0; i--)
cout << i << "\n";
}
방법 2 - 방법 1에 비해 많은 메모리, 짧은 시간
#include <iostream>
#include <string>
using namespace std;
int main() {
int N;
cin >> N;
string s = "";
for (int i = N; i >0; i--)
s += to_string(i) + "\n";
cout << s;
}
방법 3
#include <stdio.h>
int main(){
int N;
scanf("%d", &N);
for(int i=N; i>0; i--)
printf("%d\n", i);
return 0;
}
https://www.acmicpc.net/problem/11021
11021번: A+B - 7
각 테스트 케이스마다 "Case #x: "를 출력한 다음, A+B를 출력한다. 테스트 케이스 번호는 1부터 시작한다.
www.acmicpc.net
방법 1
#include <iostream>
using namespace std;
int main() {
int T, A, B;
cin >> T;
for (int i = 0; i < T; i++) {
cin >> A >> B;
cout << "Case #" << i + 1 << ": " << A + B << "\n";
}
}
방법 2
#include <stdio.h>
int main(){
int T,A,B;
scanf("%d",&T);
for(int i=1; i<=T; i++){
scanf("%d %d",&A,&B);
printf("Case #%d: %d\n",i,A+B);
}
}
https://www.acmicpc.net/problem/11022
11022번: A+B - 8
각 테스트 케이스마다 "Case #x: A + B = C" 형식으로 출력한다. x는 테스트 케이스 번호이고 1부터 시작하며, C는 A+B이다.
www.acmicpc.net
방법 1
#include <iostream>
using namespace std;
int main() {
int T, A, B;
cin >> T;
for (int i = 0; i < T; i++) {
cin >> A >> B;
cout << "Case #" << i + 1 << ": " << A << " + " << B << " = " << A + B << "\n";
}
}
방법 2
#include <stdio.h>
int main(){
int T,A,B;
scanf("%d",&T);
for(int i=1; i<=T; i++){
scanf("%d %d",&A,&B);
printf("Case #%d: %d + %d = %d\n",i,A,B,A+B);
}
}
https://www.acmicpc.net/problem/2438
2438번: 별 찍기 - 1
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
www.acmicpc.net
방법 1
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
for (int i = 0; i < N; i++) {
for (int j = 0; j <= i; j++)
cout << "*";
cout << "\n";
}
}
방법 2
#include <stdio.h>
int main(){
int n;
scanf("%d",&n);
for(int i=0; i<n; i++){
for(int j=0; j<=i; j++)
printf("*");
printf("\n");
}
}
방법 3
https://www.acmicpc.net/problem/2439
2439번: 별 찍기 - 2
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.
www.acmicpc.net
방법 1
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if ((N-1 - j) > i)
cout << " ";
else
cout << "*";
}
cout << "\n";
}
}
방법 2
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
for (int i = 1; i <= N; i++) {
for (int j = 0; j < N - i; j++)
cout << " ";
for (int j = 0; j < i; j++)
cout << "*";
cout << "\n";
}
}
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N - (i+1); j++)
cout << " ";
for (int j = 0; j < (i+1); j++)
cout << "*";
cout << "\n";
}
}
https://www.acmicpc.net/problem/10871
10871번: X보다 작은 수
첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000) 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.
www.acmicpc.net
방법 1
#include <iostream>
using namespace std;
int main() {
int N, X, A;
cin >> N >> X;
for (int i = 0; i < N; i++) {
cin >> A;
if (A < X)
cout << A << " ";
}
return 0;
}
방법 2
#include <iostream>
using namespace std;
int main() {
int N, X;
cin >> N >> X;
int A[N];
for (int i = 0; i < N; i++) {
cin >> A[i];
if (A[i] < X)
cout << A[i] << " ";
}
return 0;
}