본문 바로가기

PS_Codeforce

[Codeforce C++] div.3 Problem A. Insert Digit

https://codeforces.com/contest/1811/problem/A

 

Problem - A - Codeforces

 

codeforces.com

풀이 :

- n길이의 숫자가 주어지고, 숫자 digit(0~9)가 하나 주어진다.

- digit을 숫자의 한 부분에 삽입하여 이 숫자를 최댓값으로 만들어 출력해야 한다

- n의 최댓값이 200000이고, 계산하기 편하도록 숫자는 문자열로 입력받는다

- 최댓값으로 만들기 위해서는 digit을 digit보다 작은 값 바로 앞에 넣으면 된다

- 따라서, 문자열을 앞에서부터 하나씩 출력하면서 탐색하는데,

   digit보다 작은 값이 나올 경우 digit을 먼저 출력하고 이어서 남은 문자열을 출력한다

- digit이 0이거나, digit과 같은 값으로 이루어진 문자열인 경우 제일 마지막에 출력한다

 

코드 :

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int main(){
    cin.tie(NULL);
    ios::sync_with_stdio(false);

    string s;
    int n, digit, t;
    bool check;

    cin >> t;
    while(t--){
        check = true; //digit을 출력했는지 안 했는지 check
        cin >> n >> digit >> s;
        for(int i=0; i<n; i++){
            if(s[i] < digit+'0' && check && digit != 0){ //digit보다 작은 값이고,
                cout << digit; //출력이 된 적이 없으며, digit이 0이 아니라면 digit 출력
                check = false; //출력했음을 표시
            }
            cout << s[i]; //하나씩 계속 출력
        }
        if(check){ //digit이 출력 된 적이 없다면
            cout << digit; //마지막에 출력
        }
        cout << '\n';
    }
}

'PS_Codeforce' 카테고리의 다른 글

2022_Dec_PS  (0) 2023.01.20