no image
[C++] 백준 4단계 - 10810번 문제
문제설명 소스코드 #include using namespace std; int arr[101]; int N, M; int main() { cin >> N >> M; while (M--) { int i, j, k; cin >> i >> j >> k; for (int u = i; u
2023.03.29
no image
[C++] 백준 4단계 - 2562번 문제
문제설명 소스코드 #include using namespace std; int main() { int max = 0; int idx; int arr[9]; for (int i = 0; i > arr[i]; if (arr[i] > max) { max = arr[i]; idx = i; } } cout
2023.03.29
no image
[C++] 백준 4단계 - 10818번 문제
문제설명 소스코드 #include using namespace std; int main() { int N; int max; int min; cin >> N; int* arr = new int[N]; for (int i = 0; i > arr[i]; max = min = arr[0]; for (int i = 0; i max) max = arr[i]; if (arr[i] < min) min = arr[i]; } cout
2023.03.29
no image
[C++] 백준 4단계 - 10871번 문제
문제설명 소스코드 #include using namespace std; int main() { int N; int X; cin >> N >> X; int* arr = new int[N]; for (int i = 0; i > arr[i]; for (int i = 0; i < N; ++i) if (arr[i] < X) cout
2023.03.28
no image
[C++] 백준 4단계 - 10807번 문제
문제설명 소스코드 #include using namespace std; int main() { int arrlength; int num = 0; int input; cin >> arrlength; int* arr = new int[arrlength]; for (int i = 0; i > arr[i]; cin >> input; for (int i = 0; i < arrlength; ++i) if (input == arr[i]) ++num; cout
2023.03.28
no image
[C++] 백준 3단계 - 10951번 문제
문제설명 소스코드 #include using namespace std; int main() { int a, b; while (!(cin >> a >> b).eof()) cout val; cout > a >> b).eof() 방식으로 괄호 안의 cin >> a >> b를 통해 읽은 후 eof상태인지를 검사하는 것이다. 따라서 아래와 같이 소스코드를 작성해야한다. while(!(cin >> a >> b).eof()) { ... } 출처 : https://st-lab.tistory.com/257
2023.03.28
no image
[C++] 백준 3단계 - 10952번 문제
문제설명 소스코드 #include using namespace std; int main() { int A; int B; while (true) { cin >> A >> B; if (A == 0 && B == 0) break; else cout
2023.03.27
no image
[C++] 백준 3단계 - 2439번 문제
문제설명 소스코드 코드1 #include using namespace std; int main() { int input; cin >> input; for (int i = 1; i
2023.03.27

문제설명

 

소스코드

#include <iostream>
using namespace std;
int arr[101];
int N, M;
int main() {
    cin >> N >> M;
    while (M--)
    {
        int i, j, k;
        cin >> i >> j >> k;
        for (int u = i; u <= j; u++) arr[u] = k;
    }
    for (int i = 1; i <= N; ++i) cout << arr[i] << ' ';
}

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main() {
	int max = 0; int idx;
	int arr[9];
	for (int i = 0; i < 9; ++i)
	{
		cin >> arr[i];
		if (arr[i] > max)
		{
			max = arr[i];
			idx = i;
		}
	}
	cout << max << endl << idx + 1;
}

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main() {
	int N; int max; int min;
	cin >> N;
	int* arr = new int[N];
	for (int i = 0; i < N; ++i) cin >> arr[i];
	max = min = arr[0];
	for (int i = 0; i < N; ++i)
	{
		if (arr[i] > max) max = arr[i];
		if (arr[i] < min) min = arr[i];
	}
	cout << min << " " << max;
}

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main() {
	int N; int X;
	cin >> N >> X;
	int* arr = new int[N];
	for (int i = 0; i < N; ++i) cin >> arr[i];
	for (int i = 0; i < N; ++i) if (arr[i] < X) cout << arr[i] << " ";
}

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main() {
	int arrlength; int num = 0; int input;
	cin >> arrlength;
	int* arr = new int[arrlength];
	for (int i = 0; i < arrlength; ++i) cin >> arr[i];
	cin >> input;
	for (int i = 0; i < arrlength; ++i) if (input == arr[i]) ++num;
	cout << num;
}

문제설명

 

소스코드

#include <iostream>
using namespace std;
int main() {
	int a, b;
	while (!(cin >> a >> b).eof()) cout << a + b << "\n";
}

 

풀이

이 문제의 핵심 포인트는 입력이 몇 개인지 정해지지 않았다는 것이다.

파일의 끝에 도달했을 때 즉, 더이상 읽을 수 있는 데이터가 없는 경우를 EOF(End Of File)이라고 한다.

입력 스트림이 더이상 읽을 것이 없는 파일의 끝에 도달했을 때 처리를 해야 한다는 것이다.

파일의 끝까지 앍었다고 EOF가 되는 것이 아니라 끝까지 읽고난 뒤 그다음 파일을  읽으려 할 때 읽을 데이터가 없을 때 EOF가 되는 것이다.

 

cin은 EOF를 발생시키는데 eof()함수는 파일의 끝에 도달한 뒤 읽고자 할 경우 true를 발생시킨다.

while(!cin.eof()) {
	...
}

이렇게 코드를 작성하면 틀린다.

 

char val;
while(!cin.eof()) {
	cin >> val;
	cout << val;
}

 

이렇게 코드가 작성되어있고 a, b ,c ,d를 입력한다고 하면

 

위와 같이 되어 결과적으로 abcdd 출력이 되어버린다.

cin에서 EOF가 되면 더 이상 내부 스트림 상태를 fail로 두고 val 변수에 값을 저장하지 않는다. 즉, val의 상태는 이전 루프의 값을 갖고 있게 되는 것이다.

즉, eof() 가 우리가 원하는 올바른 시점에 true가 되려면 "읽기 시도를 한 후"에 eof 검사를 해야 한다는 것이다.

그렇기 때문에 (cin >> a >> b).eof() 방식으로 괄호 안의 cin >> a >> b를 통해 읽은 후 eof상태인지를 검사하는 것이다.

 

따라서 아래와 같이 소스코드를 작성해야한다.

while(!(cin >> a >> b).eof()) {
	...
}

 

출처 : https://st-lab.tistory.com/257

문제설명

 

소스코드

#include<iostream>
using namespace std;
int main()
{
	int A; int B;
	while (true)
	{
		cin >> A >> B;
		if (A == 0 && B == 0) break;
		else cout << A + B << endl;
	}
}

문제설명

 

소스코드

코드1

#include<iostream>
using namespace std;
int main()
{
	int input;
	cin >> input;
	for (int i = 1; i <= input; ++i)
	{
		for (int j = 1; j <= input; ++j)
		{
			if (input - j < i) cout << "*";
			else cout << " ";
		}
		cout << endl;
	}
}

 

코드2

#include<iostream>
using namespace std;
int main()
{
	int input;
	cin >> input;
	for (int i = 1; i <= input; ++i)
	{
		for (int j = 1; j <= input -i; ++j) cout << " ";
		for (int j = 1; j <= i; ++j) cout << "*";
		cout << endl;
	}
}