ใ€ŒโŒจ๏ธแด„sใ€PS/๋ฐฑ์ค€_๋ฌธ์ž์—ด

[Baekjoon/๋ฐฑ์ค€][1152][C/C++] ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜

๋ฃจ๋ฐ€๐•ƒ๐•ฆ๐•„๐•š๐•ฃ 2023. 2. 8. 00:10
728x90
๋ฐ˜์‘ํ˜•
ใ€Ž๋ชฉ์ฐจใ€
0. ๊ฐœ์š”

1. ๋ฌธ์ œ
2. ํ’€์ด
3. ์ฝ”๋“œ

0. ๊ฐœ์š”

๊ตฌํ˜„, ๋ฌธ์ž์—ด ๋ฌธ์ œ. ๋ฌธ์ œ์—์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด 1๊ฐ€์ง€ ์กด์žฌํ•œ๋‹ค. ์ด ๋ถ€๋ถ„์„ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด 100%์—์„œ ์˜ค๋‹ต์ด ๋ฐœ์ƒํ•œ๋‹ค.

1. ๋ฌธ์ œ

https://www.acmicpc.net/problem/1152

 

1152๋ฒˆ: ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜

์ฒซ ์ค„์— ์˜์–ด ๋Œ€์†Œ๋ฌธ์ž์™€ ๊ณต๋ฐฑ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ์ด ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 1,000,000์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค. ๋‹จ์–ด๋Š” ๊ณต๋ฐฑ ํ•œ ๊ฐœ๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ, ๊ณต๋ฐฑ์ด ์—ฐ์†ํ•ด์„œ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค. ๋˜ํ•œ ๋ฌธ์ž์—ด

www.acmicpc.net

[๋ฌธ์ œ]

์˜์–ด ๋Œ€์†Œ๋ฌธ์ž์™€ ๊ณต๋ฐฑ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ์ด ๋ฌธ์ž์—ด์—๋Š” ๋ช‡ ๊ฐœ์˜ ๋‹จ์–ด๊ฐ€ ์žˆ์„๊นŒ? ์ด๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋‹จ, ํ•œ ๋‹จ์–ด๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ๋“ฑ์žฅํ•˜๋ฉด ๋“ฑ์žฅํ•œ ํšŸ์ˆ˜๋งŒํผ ๋ชจ๋‘ ์„ธ์–ด์•ผ ํ•œ๋‹ค.

[์ž…๋ ฅ]

์ฒซ ์ค„์— ์˜์–ด ๋Œ€์†Œ๋ฌธ์ž์™€ ๊ณต๋ฐฑ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ์ด ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 1,000,000์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค. ๋‹จ์–ด๋Š” ๊ณต๋ฐฑ ํ•œ ๊ฐœ๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ, ๊ณต๋ฐฑ์ด ์—ฐ์†ํ•ด์„œ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค. ๋˜ํ•œ ๋ฌธ์ž์—ด์€ ๊ณต๋ฐฑ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ๋๋‚  ์ˆ˜ ์žˆ๋‹ค.

[์ถœ๋ ฅ]

์ฒซ์งธ ์ค„์— ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

[์˜ˆ์ œ ์ž…๋ ฅ 1]

The Curious Case of Benjamin Button

[์˜ˆ์ œ ์ถœ๋ ฅ 1]

6

[์˜ˆ์ œ ์ž…๋ ฅ 2]

 The first character is a blank

[์˜ˆ์ œ ์ถœ๋ ฅ 2]

6

[์˜ˆ์ œ ์ž…๋ ฅ 3]

The last character is a blank 

[์˜ˆ์ œ ์ถœ๋ ฅ 3]

6

2. ํ’€์ด

ํ’€์ด๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

fgets ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค. ๋‹ค๋งŒ, fgetsํ•จ์ˆ˜๋Š” ์ž์‹ ๋งŒ์˜ ๋…ํŠนํ•œ ํŠน์ง•์ด ์žˆ์–ด, ์ด ๋ถ€๋ถ„์„ ์งš๊ณ  ๋„˜์–ด๊ฐ€์•ผ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•  ๋•Œ ํ—ค๋งค์ง€ ์•Š๋Š”๋‹ค. fgets ํ•จ์ˆ˜์˜ ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. (๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜, ์•„๋ž˜์ชฝ ๊ธ€์„ ์ฝ์ž.)

https://lumir.tistory.com/31

 

[C][header][stdio.h] fgets

fgets #include // C++ ์˜ ๊ฒฝ์šฐ char* fgets(char* str, int num, FILE* stream); ํŠน์ง• 1. ๊ฐœํ–‰(=newline)(='\n') ํ˜น์€ ํŒŒ์ผ๋(=EOF)์„ ๋งŒ๋‚  ๋•Œ ๊นŒ์ง€, ํ•ด๋‹น stream์˜ buffer์—์„œ ๋ฌธ์ž์—ด์„ ์ฝ์–ด๋“ค์ธ๋‹ค. (๊ฐœํ–‰(=newline)(='\n') ํ˜น์€ ํŒŒ

lumir.tistory.com

fgets ํ•จ์ˆ˜์˜ ํŠน์ง•

1. ๊ฐœํ–‰(=newline)(='\n') ํ˜น์€ ํŒŒ์ผ๋(=EOF)์„ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€, ํ•ด๋‹น stream์˜ buffer์—์„œ ๋ฌธ์ž์—ด์„ ์ฝ์–ด ๋“ค์ธ๋‹ค.

(๊ฐœํ–‰(=newline)(='\n') ํ˜น์€ ํŒŒ์ผ๋(=EOF)์„ ๋งŒ๋‚˜๋ฉด, ์ž…๋ ฅ์ด ์ข…๋ฃŒ๋œ๋‹ค.)

2. ๋ฌธ์ž์—ด์„ ์ฝ์–ด ๋“ค์ธ ํ›„, ๋ฌธ์ž์—ด ๋์— NULL(='\0')๊ฐ’์ด ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋œ๋‹ค.

3. fgets๋Š” gets์™€ ๋‹ฌ๋ฆฌ, ๊ฐœํ–‰(=newline)(='\n')์ด ํฌํ•จ๋œ ์ฑ„ ์ €์žฅ๋œ๋‹ค.

๋ฌธ์ œํ’€์ด

2๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค.

์ฒซ๋ฒˆ์งธ ํ’€์ด๋Š”, fgetsํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ๋ฐ›์€ '\n'์„ ์ง€์šฐ๊ณ  ํ‘ธ๋Š” ํ’€์ด.

๋‘๋ฒˆ์งธ ํ’€์ด๋Š”, fgetsํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ž…๋ ฅ๋ฐ›์€ '\n'์„ ์ง€์šฐ์ง€ ์•Š๊ณ  ํ‘ธ๋Š” ํ’€์ด์ด๋‹ค.

'\n'์„ ์ง€์šฐ๋Š” ๋ถ€๋ถ„์„ ์ œ์™ธํ•˜๋ฉด ๋‘ ํ’€์ด๋Š” ๊ฑฐ์˜ ์ผ์น˜ํ•œ๋‹ค. ๋‹จ, '\n'์˜ ์œ ๋ฌด๋กœ ์ธํ•˜์—ฌ, ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ์„ธ๋Š” strlen(str) ๋ถ€๋ถ„์—์„œ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

/* ๋ฐฐ์—ด str์— ๋ฌธ์žฅ์„ ์ž…๋ ฅ ๋ฐ›์Œ. */

๋ฐฐ์—ด์— ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. ์ด๋•Œ, '\n'๊ณผ '\0'์ด ๋ฐฐ์—ด์— ํฌํ•จ๋œ๋‹ค.

 

/* ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๊ฐ€ ๊ฐœํ–‰(=\n)์ผ ๊ฒฝ์šฐ, ๊ฐœํ–‰๋ฌธ์ž ์‚ญ์ œ */

๋ฐฐ์—ด์—์„œ ๊ฐœํ–‰๋ฌธ์ž๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

 

/* ๋ฌธ์ž ์‚ฌ์ด ๊ณต๋ฐฑ ์„ธ๊ธฐ */ & /* ๋ฌธ์žฅ์— ๊ณต๋ฐฑ 1๊ฐœ๋งŒ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๋Š” ์˜ˆ์™ธ์ฒ˜๋ฆฌ. ex. " " */

์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ, '(๋ฌธ์ž์—ด์˜ ์ฒ˜์Œ๊ณผ ๋งˆ์ง€๋ง‰์— ์กด์žฌํ•˜๋Š” ๊ณต๋ฐฑ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๊ณต๋ฐฑ์˜ ๊ฐœ์ˆ˜) + 1' ๊ฐ’์ด ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜์ด๋‹ค.

๋‹จ, ๋ฌธ์žฅ์— ๊ณต๋ฐฑ์ด 1๊ฐœ๋งŒ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๋Š” ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ๋Š” ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜๊ฐ€ 0๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

3. ์ฝ”๋“œ

#pragma warning (disable:4996)
#include <stdio.h>
#include <string.h>

#define MAX 1000002 //'\n'๊ณผ '\0'๊ณ ๋ ค.

int main(int argc, char* argv[]) {
	/* ๋ฐฐ์—ด str์— ๋ฌธ์žฅ ์ž…๋ ฅ ๋ฐ›์Œ. */
	char str[MAX]; 
	fgets(str,sizeof(str),stdin);

	/* ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๊ฐ€ ๊ฐœํ–‰(=\n)์ผ ๊ฒฝ์šฐ, ๊ฐœํ–‰๋ฌธ์ž ์‚ญ์ œ */
	if(str[strlen(str) - 1] == '\n') 
		str[strlen(str) - 1] = '\0';

	/* ๋ฌธ์ž ์‚ฌ์ด ๊ณต๋ฐฑ ์„ธ๊ธฐ */
	int blank = 0;
	for (int i = 0; i < strlen(str); i++)
		if (str[i] == ' ')
			if (i != 0 && i != strlen(str) - 1)
				blank++;
	
	/* ๋ฌธ์žฅ์— ๊ณต๋ฐฑ 1๊ฐœ๋งŒ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๋Š” ์˜ˆ์™ธ์ฒ˜๋ฆฌ. ex. " " */
	printf("%d", (strlen(str) == 1 && str[0] == ' ') ? blank : blank + 1);

	/* ๋งˆ๋ฌด๋ฆฌ */
	return 0;
}

/* 
[stdin์œผ๋กœ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ '\n'์˜ ํฌํ•จ ์—ฌ๋ถ€?]
fgets ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด stdin์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด, '\n'์ด ํฌํ•จ๋œ์ฑ„ ๋ฌธ์ž์—ด์ด ์ž…๋ ฅ๋œ๋‹ค.
*/
#pragma warning (disable:4996)
#include <stdio.h>
#include <string.h>

#define MAX 1000002 //'\n'๊ณผ '\0'๊ณ ๋ ค.

int main(int argc, char* argv[]) {
	/* ๋ฐฐ์—ด str์— ๋ฌธ์žฅ ์ž…๋ ฅ ๋ฐ›์Œ. */
	char str[MAX];
	fgets(str, sizeof(str), stdin);

	/* ๋ฌธ์ž ์‚ฌ์ด ๊ณต๋ฐฑ ์„ธ๊ธฐ */
	int blank = 0;
	for (int i = 0; i < strlen(str); i++)
		if (str[i] == ' ')
			if (i != 0 && i != strlen(str) - 2)
				blank++;

	/* ๋ฌธ์žฅ์— ๊ณต๋ฐฑ 1๊ฐœ๋งŒ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๋Š” ์˜ˆ์™ธ์ฒ˜๋ฆฌ. ex. " " */
	printf("%d", (strlen(str) == 2 && str[0] == ' ') ? blank : blank + 1);

	/* ๋งˆ๋ฌด๋ฆฌ */
	return 0;
}

/* 
[stdin์œผ๋กœ ์ž…๋ ฅ๋ฐ›์„ ๋•Œ '\n'์˜ ํฌํ•จ ์—ฌ๋ถ€?]
fgets ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด stdin์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด, '\n'์ด ํฌํ•จ๋œ์ฑ„ ๋ฌธ์ž์—ด์ด ์ž…๋ ฅ๋œ๋‹ค.
*/
728x90
๋ฐ˜์‘ํ˜•