문제
문제는 매우 간단하다. N을 N번 출력하는 프로그램을 작성하여라. 다만, 답이 길어지는 경우 답의 앞 M자리만 출력한다.
입력
첫 번째 줄에는 N, M이 주어진다. (1 ≤ N, M ≤ 2016)
출력
N을 N번 출력한다. 만약 답이 길어지면 답의 앞 M자리를 출력한다.
풀이 과정
출력대로 진행한다. N을 N번 출력하는 도중 답이 길어지면 답의 앞 M자리를 출력한다.
N을 출력하던 도중에 중간에 잘릴 수도 있으므로, 잘림 현상을 처리하기 위해 N을 한 글자씩 출력하면서 M을 넘지 않는지 체크한다.
재귀를 이용하여 제곱 함수와 숫자에서 특정 자리수를 가져오는 함수를 만들어 한 글자씩 M을 넘지 않도록 출력하였다.
C
#include <stdio.h>
#include <string.h>
int power(int n, int k) {
if (k == 0) return 1;
else return n * power(n, k - 1);
}
int getIdx(int n, int idx) {
if (idx == 0) return n % 10;
else return getIdx(n / 10, idx - 1);
}
int main(void) {
int n, m;
scanf("%d %d", &n, &m);
int n_size = 0;
while ((power(10, n_size)) <= n) n_size += 1;
int count = 0;
for (int i = 0; i < n; i++) {
for (int j = n_size - 1; j >= 0; j--) {
printf("%d", getIdx(n, j));
count += 1;
if (count == m) break;
}
if (count == m) break;
}
return 0;
}
Python
import sys
input = sys.stdin.readline
n, m = map(int, input().rstrip().split())
n = str(n)
now = 0
if len(n) * int(n) > m:
for i in range(m):
print(n[now], end='')
now = (now + 1) % (len(n))
else:
for i in range(int(n)):
print(n, end='')
'-- 예전 기록 > BOJ' 카테고리의 다른 글
[ BOJ ] 20114 : 미아 노트 ( SILVER 5 ) / C, Python (0) | 2023.11.18 |
---|---|
[ BOJ ] 12871 : 무한 문자열 ( SILVER 5 ) / C, Python (0) | 2023.11.18 |
[ BOJ ] 3059 : 등장하지 않는 문자의 합 ( BRONZE 3 ) / C, Python (0) | 2023.11.17 |
[ BOJ ] 10825 : 국영수 ( SILVER 4 ) / Python (0) | 2023.11.17 |
[ BOJ ] 1094 : 막대기 ( SILVER 5 ) / C, Python (0) | 2023.11.16 |