Koala - 5기/기초 알고리즘 스터디

<2주차> [BOJ / C++] 11944번 - NN

거북이목 2022. 1. 22. 06:33

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

 

11944번: NN

첫 번째 줄에는 N, M이 주어진다. (1 ≤ N, M ≤ 2016)

www.acmicpc.net

 

 

문제

 

코드

#include <bits/stdc++.h>
using namespace std;
#include <cmath>
#define PI 3.141592653589793
#define ll long long

string str;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);

	string n;
	int m;
	cin >> n >> m;
	int len = n.length();
	int num = stoi(n);
	
	if (len*num <= m)
	{
		for (int i=0; i<num; i++)
		{
			str = str + n;
		}
		cout << str;
	}

	else
	{
		int q = m / n.length();
		int k = m % n.length();
		
		for (int i=0; i<q; i++)
		{
			str = str + n;
		}
		for (int i=0; i<k; i++)
		{
			str = str + n[i];
		}
		cout << str;
	}
}

 

풀이

우선 len*num와 m을 비교하여 2가지 경우로 구분한다(len은 입력받은 string n의 길이며 num은 string n을 int로 변환한 값이다)

len*num <= m 인 경우, 반복문을 통해 str을 붙여나간 후 출력하면 된다.

len*num > m 인 경우는 일단 정수 q와 정수 k를 정의한다.

(q: 입력받은 m을 문자열 n의 길이로 나눈 몫 / k: 입력받은 m을 문자열 n의 길이로 나눈 나머지)

q만큼 반복하는 반복문을 통해 str을 붙여나간다. 이후 k만큼 반복하는 반복문을 통해 입력받았던 string n의 인덱스 0부터 k-1까지를 str에 추가로 붙여준 후 출력하면 된다.

 

결과