알파벳을 주어진 만큼 출력하되 한 줄에 10개씩 출력한다.
구현
문자열에 알파벳을 저장하고 10개씩 출력할 것이다.
#include <stdio.h>
int main(void) {
int test_case, T;
scanf("%d", &T);
for (test_case = 1; test_case <= T; ++test_case)
{
int N, index = 0, n[10] = { 0 };
char answer[201] = { 0 }, al[11] = { 0 };
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%s %d", &al[i], &n[i]);
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < n[i]; j++) {
answer[index++] = al[i];
}
}
int sum = 0;
for (int i = 0; i < N; i++) sum += n[i];
printf("#%d\n", test_case);
for (int i = 0; i<sum; i++) {
printf("%c", answer[i]);
if ((i + 1) % 10 == 0) {
printf("\n");
}
}
}
return 0;
}
answer라는 문자열을 생성해 알파벳을 반복한 횟수만큼 저장하고, 10의 배수마다 개행문자를 출력해 개행한다.
N과 Ki의 범위가 크지 않아서 가능한 방법이었다.
근데 생각해보니까 문자를 출력할 때마다 개수를 세면 굳이 문자열을 다 저장할 필요가 없다는 것을 깨달았다.
#include <stdio.h>
int main(void) {
int test_case, T;
scanf("%d", &T);
for (test_case = 1; test_case <= T; ++test_case)
{
int N, ck = 0, n[10] = { 0 };
char al[11] = { 0 };
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%s %d", &al[i], &n[i]);
}
printf("#%d\n", test_case);
for (int i = 0; i < N; i++) {
for (int j = 0; j < n[i]; j++) {
printf("%c", al[i]);
ck++;
if (ck % 10 == 0) printf("\n");
}
}
printf("\n");
}
return 0;
}
이렇게 간단하게 풀 수가 있었네
더보기
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int testcase, n, i, j, c = 0, k;
int* num;
char* word;
scanf("%d", &testcase);
for (i = 0; i < testcase; i++) {
scanf("%d", &n);
num = (int*)malloc(sizeof(int) * n);
word = (char*)malloc(n + 1);
for (j = 0; j < n; j++) scanf("%s %d", &word[j], &num[j]);
printf("#%d\n", i + 1);
c = 0;
for (j = 0; j < n; j++) {
for (k = 0; k < num[j]; k++) {
printf("%c", word[j]);
c++;
if (c % 10 == 0) printf("\n");
}
}
printf("\n");
}
return 0;
}
테스트 케이스 한번에 출력하려고 했던 시절
#include <stdio.h>
#include <stdlib.h>
int main(void){
int *num, n;
int testcase, i, j, k, c;
int sum = 0;
char *word;
scanf("%d", &testcase);
// n = (int*)malloc(sizeof(int)*testcase);
for(i=0; i<testcase; i++) scanf("%d", &n);
num = (int*)malloc(sizeof(int)*n*testcase);
word = (char*)malloc(n*testcase+1);
for(i=0; i<testcase; i++){
for(j=0; j<n; j++) scanf("%s %d", &word, &num);
}
printf("%s %d", word[0], num[0]);
/* char *print;
for(i=0; i<n*testcase; i++) sum += num[i];
print = (char*)malloc(sum+1);
for(i=0; i<testcase; i++){
for(j=0, c=0; j<n; j++){
for(k=0; k<num[j]; k++) print[c] = word[j];
c=num[j];
}
}
for(i=0; i<sum; i++){
printf("%s", print[i]);
if(i%10==0) printf("\n");
}*/
return 0;
}
'SWEA > [D2]' 카테고리의 다른 글
[C언어] SWEA 1288 새로운 불면증 치료법 (0) | 2022.02.27 |
---|---|
[C언어] SWEA 1986 지그재그 숫자 (0) | 2022.02.27 |
[C언어] SWEA 1976 시각 덧셈 (0) | 2022.02.26 |
[C언어] SWEA 1983 조교의 성적 매기기 (0) | 2020.08.30 |
[C언어] SWEA 1979 어디에 단어가 들어갈 수 있을까 (0) | 2020.08.30 |