공부 자료/알고리즘
(C/C++) 백준 11944번 - NN
뚜루뚜루세니
2021. 7. 7. 22:06
728x90
문제출처: https://www.acmicpc.net/problem/11944
11944번: NN
첫 번째 줄에는 N, M이 주어진다. (1 ≤ N, M ≤ 2016)
www.acmicpc.net
1. 코드
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
using namespace std;
int main(void) {
int n, m;
scanf("%d %d", &n, &m);
string arr = to_string(n); //int형을 string으로 변환
int size = arr.length();
if (size * n > m) { //m보다 길이가 길면
int k = m / size;
for (int i = 0; i < k; i++) { //m에서 n길이 나눈 것까지 반복해서
printf("%s", arr.c_str());
}
k = m % size;//나머지 길이 만큼은
for (int i = 0; i < k; i++) {
printf("%c", arr[i]); //string 인덱스로 접근해서 출력
}
}
else {
for (int i = 0; i < n; i++) {//그냥 n을 n번 출력 해줌
printf("%s", arr.c_str());
}
}
return 0;
}
2. 해결과정
처음에 n과 m을 입력받고 n을 n번 반복해서 출력해준다.
결과가 너무 길어지면 m자리까지 n을 반복해서 출려해주면 되는데
따라서 n을 string으로 변환하고, 길이를 구해준다. n의 길이와 n을 곱했을 때 m보다 길이가 길면 m을 n의 길이로 나눈것 만큼 반복을 해서 출력해주고, 나머지는 string의 인덱스로 접근해서 하나씩 출력을 해주도록 했다.
만약에 m보다 길이가 길지 않다면 그냥 string을 출력해주면 된다.
3. 느낀점
string이 너무 어렵다..string출력을 해주려면 c.str()해줘야 한다는 것을 다시 배우게 되었다. C++을 처음 해보기 때문에 string의 개념이 잘 안잡혀 있는 것같고, 형변환에서 많이 헤맸기 때문에 시간이 많이 걸린 문제이다. 자유자재로 형변환을 하려면 포인터나, 여러가지 개념들 부터 다시 차근차근 공부를 해야할 것 같다.
728x90