백준 11721 문제
C프로그램으로 알고리즘을 공부하고 있는 학생입니다. (Github)
이번 문제는 간단한 입출력 문제입니다.
이 문제를 해결하기 위해서 저는 입력을 string으로 받아 저장한 후, 한글자씩 출력하다가 10의 배수번째에서 '\n'을 출력하도록 코드를 짜봤습니다.
#include <stdio.h>
#include <string.h>
#define MAX_STR 101
int main(void) {
char str[MAX_STR];
const int print_size = 10;
int length, i;
scanf("%s", str);
length = strlen(str);
for(i = 0; i < length; i++) {
printf("%c", str[i]);
if((i+1) % print_size == 0)
putchar('\n');
}
putchar('\n');
return 0;
}
문제 해결 후 다른 분들의 소스코드를 보니 더 간단하며 메모리도 아낄 수 있는 방법이 있었습니다.
#include <stdio.h>
int main(void) {
char inStr[11];
while (scanf("%10s", inStr) > 0){
printf("%s\n",inStr);
}
return 0;
}
Check
- scanf("%10s", inStr)와 같이 %s 사이에 정수를 넣음으로써 string의 문자입력개수를 제한할 수 있다.
이번 문제를 통해서 scanf 함수로 문자열의 사이즈를 제한하여 입력 받을 수 있다는 것을 알게되었습니다.
scanf함수로 문자열 사이즈를 제한하여 사용하게 되면 10개 문자씩 출력할 수 있고 문자를 10개씩 받아들이면 되니까 제 코드처럼 char str[102]처럼 메모리를 낭비할 필요도 없게 됩니다.
문법 정리
scanf는 문자열 입력 사이즈의 제한을 두지 않기 때문에 오버플로우를 범할 위험이 있다. 이때 폭을 지정해주면 오버플로우를 방지할 수 있다.
char str[10]; scanf("%9s", str); // 널문자를 위해서 9개까지
Author And Source
이 문제에 관하여(백준 11721 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jjag1015/백준-11721-문제저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)