Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 필기
- 합격
- 프로그래머스 #최소힙 #우선순위 큐
- 유니티3d
- 3회차
- FPS
- 유니티
- 게임제작
- 게임 개발
- 자바스크립트 게임
- 정처기 필기
- 게임 제작
- 게임
- 1인 게임
- 정처기
- 자바스크립트
- 토이 프로젝트
- unity3d
- 1인 게임 개발
- Pong
- portal
- 1인 개발
- Unity2D
- Vampire Survivors
- 유니티 3D
- Unity
- 1인 게임 제작
- 정보처리기사
- 퐁
- Unity #Unity2D #Portal
Archives
- Today
- Total
Coding Feature.
백준) 1152번: 단어의 개수 in C 본문
Solution
위 문제는 특히 C언어의 경우, 먼저 문자열 전체를 입력받고 공백의 개수를 세거나, 문자열 앞 뒤에 공백이 포함된 경우를 나누는 등 굉장히 복잡한 방향으로 풀이가 흘러갈 위험성이 있다.
만약 위 문제와 같이 백준에서 어떤 원소들을 원소 개수 N 없이 입력받고 싶다면 while loop와 scanf의 특성, 특히 리턴값을 잘 이용하면 된다. 알고리즘 풀이보다는 scanf 개념 숙지를 테스팅하는 문제.
원래 scanf의 반환값은 integer 형식이며 입력 항목의 개수이다.
예를 들어 int ret = scanf("%d %d %d", &a, &b, &c) 에서
ret 값은 3이 된다.
만약 입력 실패가 일어난다면 EOF(End Of File)을 반환한다.
이를 이용해 따로 입력받을 원소 개수를 받을 필요없이 while loop으로 구현할 수 있다.
scanf 함수는 문자열이 아니라 공백으로 구분된 한 단어씩 입력받으므로, while 조건문에 scanf를 통해 한 단어씩 입력받고 return 값이 EOF가 아닌 동안 loop을 반복하면서 카운팅하면 쉽게 해답을 구할 수 있다.
while(scanf("%s", str)!=EOF)
count++;
또는 scanf가 항상 입력 항목 개수를 하나씩 입력받는 것을 이용해 다음과 같이 작성해도 된다.
while(scanf("%s", str)==1)
count++;
Code
#include <stdio.h>
int main(){
int count = 0;
char str[1000001];
while(scanf("%s", str)!=EOF)
count++;
printf("%d", count);
return 0;
}
'코딩테스트 > 백준 solved.ac' 카테고리의 다른 글
백준) 1920번: 수 찾기 in C/C++ (0) | 2023.07.30 |
---|---|
백준) strlen을 for loop 조건문에 넣어서 시간 초과가 뜨는 경우(C언어) (0) | 2023.07.29 |
백준) 16985번: Maaaaaaaaaze in C (0) | 2023.07.29 |
백준) 16236번: 아기 상어 in C (0) | 2023.07.29 |
백준) 1913번: 달팽이 in C (0) | 2023.07.28 |