반응형
코딩 테스트에서 C언어로 문자열 입력을 처리할 때는 제한된 시간과 메모리 내에서 효율적으로 입력받아야 합니다. 이를 위해 몇 가지 팁을 정리했습니다.
1. 문자열 입력 기본 함수와 상황별 선택
1) scanf (주로 사용)
- 사용 조건: 공백 없이 단일 문자열 입력.
- 사용 예:
char str[100]; scanf("%s", str);
- 장점:
- 간단하며 대부분의 테스트 케이스에 적합.
- 주의:
- 공백 기준으로 입력이 끊기므로 여러 단어 입력이 필요한 경우 적합하지 않음.
2) fgets (공백 포함 입력)
- 사용 조건: 공백을 포함한 한 줄 입력.
- 사용 예:
char str[100]; fgets(str, sizeof(str), stdin);
- 장점:
- 공백 포함 문자열 입력 가능.
- 주의:
- 입력 끝에 줄바꿈 문자(\n)가 포함되므로 제거 필요:
str[strcspn(str, "\n")] = '\0'; // 줄바꿈 제거
- 입력 끝에 줄바꿈 문자(\n)가 포함되므로 제거 필요:
3) getchar (문자 단위로 입력)
- 사용 조건: 반복문으로 문자 단위 입력 필요.
- 사용 예:
char str[100]; char ch; int i = 0; while ((ch = getchar()) != '\n' && ch != EOF) { str[i++] = ch; } str[i] = '\0';
- 장점:
- 자유로운 입력 처리 가능.
- 주의:
- 여러 줄 입력이나 대규모 입력에는 적합하지 않음.
2. 긴 문자열 입력 처리
코딩 테스트에서는 종종 문자열 길이가 크거나 미정인 경우가 있습니다. 이런 상황에서는 동적 메모리 할당이 유용합니다.
동적 메모리로 문자열 입력:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int size = 100;
char *str = (char *)malloc(size);
if (!str) return 1;
int index = 0;
char ch;
printf("문자열을 입력하세요: ");
while ((ch = getchar()) != '\n' && ch != EOF) {
if (index >= size - 1) { // 메모리 초과 시 확장
size *= 2;
str = (char *)realloc(str, size);
if (!str) return 1;
}
str[index++] = ch;
}
str[index] = '\0'; // 문자열 종료
printf("입력된 문자열: %s\n", str);
free(str); // 메모리 해제
return 0;
}
3. 코딩 테스트에 유용한 팁
1) 입력 데이터가 많을 경우 scanf와 버퍼를 조합
- 입력 속도가 중요할 때, 버퍼를 사용하여 입력 속도를 최적화합니다.
#include <stdio.h>
#define SIZE 100000
int main() {
char buffer[SIZE];
fread(buffer, 1, SIZE, stdin); // 대량 입력
printf("입력된 데이터: %s\n", buffer);
return 0;
}
- 장점:
- 입력 속도 매우 빠름.
- 대규모 입력 데이터를 빠르게 처리 가능.
2) freopen으로 파일 입력 처리
- 코딩 테스트에서 파일 입력이 주어지는 경우:
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
- 입력과 출력을 파일로 리디렉션하여 처리.
3) 줄바꿈 제거 및 입력 정리
- 줄바꿈 문자 제거:
str[strcspn(str, "\n")] = '\0';
- 공백을 포함한 문자열 입력:
char str[100]; fgets(str, sizeof(str), stdin);
4. 주의사항
- 입력 제한 고려:
- 문제에서 주어진 문자열 길이 제한을 확인하고 배열 크기를 적절히 설정.
- 입력 종료 처리:
- EOF나 특정 종료 조건을 처리하는 로직 필요.
- 버퍼 초기화:
- 입력 전에 배열을 초기화하거나, 쓰레기 값이 남지 않도록 주의.
- 시간 제한 고려:
- 너무 복잡한 문자열 처리는 시간 초과 위험이 있으므로 효율적인 방식 선택.
5. 추천 함수와 상황
함수 공백 포함 동적 메모리 사용 대규모 입력 추천 상황
scanf | ❌ | ❌ | ✅ | 공백 없는 간단한 입력 |
fgets | ✅ | ❌ | ✅ | 한 줄 전체 입력 필요 |
getchar | ✅ | ❌ | ❌ | 문자 단위 입력 필요 |
동적 메모리 | ✅ | ✅ | ✅ | 문자열 크기가 불확실한 경우 |
버퍼 (fread) | ✅ | ❌ | ✅ | 대규모 입력 처리 |
이 팁들을 활용하면 C언어로도 빠르고 효율적으로 문자열 입력을 처리할 수 있습니다!
반응형
'Computer Science > C 언어' 카테고리의 다른 글
[C #17] 구조체(Structs), 공용체(Unions), 열거형(Enums) (0) | 2024.12.14 |
---|---|
[C #15] 문자열 (Strings) (0) | 2024.12.13 |
[C #14] 동적 메모리 할당 (Dynamic Memory Allocation) (0) | 2024.12.12 |
[C #13] 포인터와 배열 (Pointers and Arrays) (1) | 2024.12.11 |
[C #12] 포인터 (Pointers) (1) | 2024.12.10 |