백준 200제

백준 c++로 문제 풀기(21~30)

노재두내 2025. 5. 6. 19:44

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번 공 넣기