본문 바로가기

백준/C++

[BaeKJoon/C++] 백준 3047 c++ ABC

반응형

https://www.acmicpc.net/problem/3047

 

3047번: ABC

첫째 줄에 세 수 A, B, C가 주어진다. 하지만, 순서는 A, B, C가 아닐 수도 있다. 세 수는 100보다 작거나 같은 자연수이다. 둘째 줄에는 A, B, C로 이루어진 세 글자가 주어지며, 이 순서대로 출력하면

www.acmicpc.net

문제

세 수 A, B, C가 주어진다. A는 B보다 작고, B는 C보다 작다.

세 수 A, B, C가 주어졌을 때, 입력에서 주어진 순서대로 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 세 수 A, B, C가 주어진다. 하지만, 순서는 A, B, C가 아닐 수도 있다. 세 수는 100보다 작거나 같은 자연수이다. 둘째 줄에는 A, B, C로 이루어진 세 글자가 주어지며, 이 순서대로 출력하면 된다.

출력

주어진 세 수를 주어진 출력 순서대로 출력하면 된다.

예제 입력 1 복사

1 5 3
ABC

예제 출력 1 복사

1 3 5

예제 입력 2 복사

6 4 2
CAB

예제 출력 2 복사

6 2 4

풀이

1. 3개의 수를 오름차순으로 정렬한다. input 1 5, 3 => 1, 3, 5

2. 길이가 3인 문자열을 입력해서 A는 가장 작은 수, B는 가운데 수, C는 가장 큰 수를 순서대로 출력한다.

3. 문자열이 꼭 ABC가 아니고 BAC, CAB 등등 이런 문자열이 나오기 때문에 2번의 내용대로 규칙을 정했다.

- 코드를 보면서 풀이 내용을 보면 더 쉽게 이해가 갈것 같다.

코드

#include <iostream>
#include <string>       // 문자열 string
#include <algorithm>    // sort
#include <vector>       // vector
 
using namespace std;
 
int main() {
 
    string str;
    vector<int> vec;
 
    for(int i=0; i<3; i++){
        int n;
        cin>>n;
        // 입력받은 3개의 n을 백터 배열에 넣는다.
        vec.push_back(n);
    }
 
    cin>>str;
 
    // 오름차순으로 정렬
    sort(vec.begin(), vec.end());
 
    int len = str.length();
 
    for(int i=0; i<len; i++){
        // 문자 'C'가 나오면 가장 큰수 출력
        if(str[i]=='C'){
            // 배열의 가장 마지막 수는 '\0', NULL값 즉, 쓰래기 값이기 때문에 -1을 꼭 해주어야 한다.
            cout<<vec[len-1]<<" ";
        }
        // 문자 'A'가 나오면 가장 작은 수 출력
        else if(str[i]=='A'){
            cout<<vec[0]<<" ";
        }
        // 문자 'B'가 나오면 가운데 수 출력
        else{
            cout<<vec[1]<<" ";
        }
    }
    return 0;
}
 
// 1 5 3
// ABC
// == 135
cs

 

 

반응형