백준 c++로 문제 풀기(21~30)
21/200 2439번 별 찍기 -2
첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제
하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.
#include <iostream>
using namespace std;
int main()
{
int N;
cin>>N;
for(int i=1;i<=N;i++)
{
for(int k=1;k<=N-i;k++)
{
cout<<'\t';
}
for(int j=1;j<=i;j++)
{
cout<<"*";
}
cout<<'\n';
}
return 0;
}
이렇게 작성했는데
이렇게 나온다 알고보니 내가 탭문자로 써서 그렇다 탭 문자는 보통 4칸이나 8칸의 공백으로 표현되기 때문에 탭문자로 쓰면 안된다.
cout<<'/t'; =====> cout<<" "; 로 수정
#include <iostream>
using namespace std;
int main()
{
int N;
cin>>N; ///5
for(int i=1;i<=N;i++) //i=1 i<=5
{
for(int k=1;k<=N-i;k++)// k=1 k<=4
{
cout<<" ";
}
for(int j=1;j<=i;j++) //j=0 j<=1
{
cout<<"*";
}
cout<<'\n';
}
return 0;
}
22/200 10952번 A+B-5
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
입력의 마지막에는 0 두 개가 들어온다.

#include <iostream>
using namespace std;
int main()
{
int A,B;
cin>>A>>B;
while(A!=0&&B!=0)
{
cout<<A+B<<'\n';
}
return 0;
}
아 생각해보니까 입력을 한번밖에 안받았다.
무한루프 지옥에 빠졌구나 ㅎ
#include <iostream>
using namespace std;
int main()
{
int A,B;
cin>>A>>B;
while(A!=0&&B!=0)
{
cout<<A+B<<'\n';
cin>>A>>B;
}
return 0;
}
#include <iostream>
using namespace std;
int main() {
int A, B;
while (true) {
cin >> A >> B;
if (A == 0 && B == 0) break;
cout << A + B << '\n';
}
return 0;
}
이렇게도 작성 가능하다 이게 더 명확한 코드 같다.
<1차원 배열>
23/200 10807번 개수 세기
문제
총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거나 같으며, 100보다 작거나 같다.

#include <iostream>
using namespace std;
int main()
{
int N;
cin>>N;
int arr[20];
for(int i=0;i<N;i++)
{
cin>>arr[i];
}
int v; //찾으려고 하는 정수
cin>>v;
int s=0;//v와 똑같은 정수 개수
//찾기
for(int j=0;j<N;j++)
{
if(arr[j]==v)
{
s++;
}
}
cout<<s<<endl;
return 0;
}
이렇게 작성했는데
오류가 났다.
아 입력 조건을 까먹었다.
int arr[20]; ==== > int arr[100]; 으로 수정
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, target, count = 0;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
cin >> target;
for (int num : nums) {
if (num == target) {
count++;
}
}
cout << count << '\n';
return 0;
}
vector(가변 크기 배열)을 이용한 풀이도 있다.
24/200 10871번 X보다 작은 수
정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.
첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)
둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.
X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다.
#include<iostream>
using namespace std;
int main()
{
int N,X;
int arr[10000];
cin>>N>>X;
//수열
for(int i=0; i<N;i++)
{
cin>>arr[i];
}
for(int i=0;i<N;i++)
{
if(arr[i]<X)
{
cout<<arr[i]<<' ';
}
}
return 0;
}
25/200 10818번 최소, 최대
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

처음에 min,max를 그냥 정수 0으로 초기화시켰더니 틀렸다.
생각해보니 정수 범위가 -1000000부터이기 때문에 그러면 안된다ㅎ
초기화를 arr[0]으로 시켜서 정답
#include <iostream>
using namespace std;
int main()
{
int N;
int arr[1000000];
cin>>N;
for(int i=0;i<N;i++)
{
cin>>arr[i];
}
int min=arr[0];
int max=arr[0];
for(int i=0;i<N;i++)
{
if(arr[i]<min)
{
min=arr[i];
}
else if(arr[i]>max)
{
max=arr[i];
}
}
cout<<min<<' '<<max<<'\n';
return 0;
}
26/200 2562번 최댓값
9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수
3, 29, 38, 12, 57, 74, 40, 85, 61
이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.
#include<iostream>
using namespace std;
int main()
{
int N;
int arr[9];
//9번 받기(근데 줄 바꿈 ?)
for(int i=0;i<9;i++)
{
cin>>N;
arr[i]=N;
}
int max=arr[0];
int j=0;
for(int i=0;i<9;i++)
{
if(arr[i]>max)
{
max=arr[i];
j=i;
}
}
cout<<max<<'\n';
cout<<j+1<<'\n';
return 0;
}
j+1을 부분 유의하자 !!! 첨에 이거때문에 틀렸다ㅜ
왜이리 실수를 많이 하는지 ~~~
27/200 10810번 공 넣기