관리 메뉴

cococo-coding

[C++ 풀이] 11944번. NN 본문

[BOJ] 코드 모음/C++_learning 문제집

[C++ 풀이] 11944번. NN

_dani 2024. 1. 25. 22:01

 

문제분석

n을 입력받아 n번 출력하는 문제이다. 이때 답이 길어지면 답의 앞의 m자리를 출력한다는 조건이 이해가 어려웠다.

우선은 n을 n번 반복한 문자열을 만들고, 이 길이와 m을 비교하는 방법을 이용했다.

 

알고리즘 설계

출력할 문자열을 string s로 선언했다.

for문을 이용해서 string으로 변환한 n을 s에 계속해서 붙였다. 

이때 to_string으로 int형을 string으로 변환해주어야한다.

 

s의 길이와 m을 비교해서 만약 m이 더 짧으면

s의 앞부터 m까지 잘라서 출력하도록 s.substr(0,m)코드를 작성하였고

아니면 그냥 s를 출력했다.

 

코드

#include <iostream>
#include <string>
using namespace std;
/*
    1. n m을 입력받음
    2. n을 n번 붙인 문자열을 만든다.
    3. 2번과 m의 길이를 비교해서 출력함
*/
int main() {
    //1
    int n, m;
    cin >> n >> m;

    //2
    string s;
    for (int i = 0; i < n; i++) {
        //s += n; 이렇게하면 안됨
        s += to_string(n);
        
    }
    //3
    if (s.length() > m) {
        cout << s.substr(0, m) << '\n';
    }
    else {
        cout << s << '\n';
    }
    return 0;
}

 

느낀점

문자열도 +=로 계속 붙일 수 있으며,

이때 붙일 인자는 to_string으로 변환해주어야한다!

substr()함수도 백준을 풀때 유용하게 쓰이는 것 같으니 활용법을 잘 알아두어야겠다.