문제

키보드로 입력한 단어 중에서 길이가 가장 긴 단어의 길이를 출력하세요. 한 줄에 하나의 단어만 입력하며 ctrl+z 를 누를 때까지 입력한 단어 중에서 길이가 가장 긴 단어의 길이를 출력합니다. 배열은 사용하지 않고 작성하세요.


풀이과정: 배열을 쓸수 없다. 따라서 scanf와 버퍼를 이용하여 버퍼 안에 있는 문자의 개수를 하나씩 셀 수 있도록 코드를 작성한다.

이는 while문 안에 scanf를 작성하여 구현할 수 있다.

scanf를 이용하여 버퍼에 문자들이 저장되면, 버퍼 가장 앞쪽에 있는 문자는 ch에 초기화 된다.

이 문자는 while문이 다시 시작되었을 때 scanf를 만나면 날라간다. 동시에 버퍼 두번째에 있던 문자가 ch에 초기화 된다.

이러한 과정이 반복되는 동안 while 문에 temp_count++를 넣어 ch에 초기화된 문자의 개수를 세도록 한다.

그러다 마지막으로 버퍼에 입력된 개행문자를 만나면 while문을 탈출하도록 코드를 짠다.


do while문을 사용하면 while문과 다르게 ch를 초기화 하지 않아도 된다. do while문은 일단 do안에 있는 코드를 먼저 실행하기 때문이다. 따라서 미리 ch를 초기화 시키지 않고 do에 있는 scanf를 통해 ch를 초기화를 시키고 while문을 돌릴 수 있다.

#include <stdio.h>

int main(void){


	int max_count = 0;

	while (1) {
		
		int res;
		char ch;
		int temp_count = 0;

		do{
			res = scanf("%c", &ch);
			if (res == -1 || ch == '\n') break;
			temp_count++;
		} while (ch != '\n');

		if (temp_count > max_count) max_count = temp_count;
		
		if (res == -1) break;

	}

	printf("가장 긴 단어의 길이 : %d", max_count);

	return 0;
}

Tags:

Updated: