https://www.acmicpc.net/problem/2675
문제
문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code "alphanumeric" 문자만 들어있다.
QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./: 이다.
풀이과정
1) scanf 이 왜 한번만 될까?
#include <stdio.h>
#include <string.h> //strtok 함수를 위한 것
int main() {
int T; //TEST CASE 개수
char input[22]; //R+space+chleo 20글자 <=22 이므로 길이 22인 char 형 배열 선언
scanf("%d", &T);
for (int i = 0; i < T; i++) {
scanf("%s", input);
printf("%s", input);
fflush(stdin); //버퍼비우기 남아있던 \n 사라지고 scanf 할 수있음
}
return 0;
}
fflush로 버퍼까지 비워 scanf 가 올바르게 작동할 줄 알았으나, 한번만 하고 종료된다 .fflush 는 논외로 하고
문자열 입력에 숫자가 들어가서 그런가 추측 해본다..혹은 space바를 구분해주지 않아서...그런 것 같다.
scanf 는 " ' '(스페이스바), \t,\n'" 앞에서 끊긴다고 한다 .
▼질문 올림..
scanf 자체는 줄이 아니라 words 를 읽는다.
prinf로 scanf 뭐 되었는지 항상 체크해라.
scanf 한번 하는 이유
내가 '3 ABC'를 입력한 것을 scanf 는 두 개로 나눠서 인식하는 것임.
중간에 있는 spacebar 를 기준으로
첫번째 3
두번째 ABC
따라서 나는 한 번 입력했다고 생각한 것이
scanf 입장에서는 두 번 입력된 것이다.
1)숫자 + 문자열 한번에 입력하는 idea
for (int i = 0; i < T; i++) {
scanf("%d %s", &M,input);
printf("%d\n", M);
printf("%s\n",input);
}
2)for 문을 활용해 숫자 x 문자열 인수 출력하는 idea
for (int i = 0; i < strlen(input); i++) {
cnt = 0;
while ( cnt < M)
{
printf("%c", input[i]);
cnt++;
}
}
for 문자열 기준으로
출력하는 코드인데, 한 번밖에 출력되지 않았다.
AAABBBCCC는 어디간 거지?
처음 3 ABC는 scanf 가 한번 더 돌아가면서 5 /HTP 로 덮이는데
이걸 기준으로 밑에서 for 문을 돌리니까 3 ABC가 안나오는 것이다.
따라서 scanf로 넣은 값이 덮어쓰기 되기 전에 값을 출력해야한다.
따라서 이런식으로 scanf("%d %s", &M,input) 뒤에
코드를 바로 넣어주었다.
for (int i = 0; i < T; i++) {
scanf("%d %s", &M,input);
for (int i = 0; i < strlen(input); i++) {
cnt = 0;
while (cnt < M)
{
printf("%c", input[i]);
cnt++;
}
}
정답코드
#include <stdio.h>
#include <string.h> //strtok 함수를 위한 것
int main() {
int T=0; //TEST CASE 개수
char input[22]; //R+space+chleo 20글자 <=22 이므로 길이 22인 char 형 배열 선언
int M = 0;; // 좌측의 수
int cnt = 0;
scanf("%d", &T);
for (int i = 0; i < T; i++) {
scanf("%d %s", &M,input);
for (int i = 0; i < strlen(input); i++) {
cnt = 0;
while (cnt < M)
{
printf("%c", input[i]);
cnt++;
}
}
printf("\n");
}
return 0;
}
'프로그래밍 언어 > C' 카테고리의 다른 글
C언어 백준 1152번 단어의 개수 해설 {런타임 에러(Segfault) } (0) | 2021.09.10 |
---|---|
C언어 백준 1157번 단어공부 해설 (4) | 2021.09.09 |
C언어 백준 10809 (0) | 2021.09.07 |
C언어 백준 10809 번 (2) | 2021.09.04 |
C언어 백준 11720 해설 (1) | 2021.09.03 |