ใ๋ชฉ์ฐจใ
0. ๊ฐ์
1. ๋ฌธ์
2. ํ์ด
3. ์ฝ๋
0. ๊ฐ์
๊ตฌํ, ๋ฌธ์์ด ๋ฌธ์ . ๋ฌธ์ ์์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ด์ผ ํ๋ ๋ถ๋ถ์ด 1๊ฐ์ง ์กด์ฌํ๋ค. ์ด ๋ถ๋ถ์ ์์ธ์ฒ๋ฆฌ ํด์ฃผ์ง ์์ผ๋ฉด 100%์์ ์ค๋ต์ด ๋ฐ์ํ๋ค.
1. ๋ฌธ์
https://www.acmicpc.net/problem/1152
[๋ฌธ์ ]
์์ด ๋์๋ฌธ์์ ๊ณต๋ฐฑ์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ์ด ๋ฌธ์์ด์๋ ๋ช ๊ฐ์ ๋จ์ด๊ฐ ์์๊น? ์ด๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋จ, ํ ๋จ์ด๊ฐ ์ฌ๋ฌ ๋ฒ ๋ฑ์ฅํ๋ฉด ๋ฑ์ฅํ ํ์๋งํผ ๋ชจ๋ ์ธ์ด์ผ ํ๋ค.
[์ ๋ ฅ]
์ฒซ ์ค์ ์์ด ๋์๋ฌธ์์ ๊ณต๋ฐฑ์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ์ด ๋ฌธ์์ด์ ๊ธธ์ด๋ 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 ํจ์์ ํน์ง์ ๋ค์๊ณผ ๊ฐ๋ค. (๋งํฌ๋ฅผ ์ฐธ์กฐํ๊ฑฐ๋, ์๋์ชฝ ๊ธ์ ์ฝ์.)
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'์ด ํฌํจ๋์ฑ ๋ฌธ์์ด์ด ์
๋ ฅ๋๋ค.
*/
'ใโจ๏ธแดsใPS > ๋ฐฑ์ค_๋ฌธ์์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon/๋ฐฑ์ค][1259][C/C++] ํฐ๋ฆฐ๋๋กฌ์ (0) | 2023.02.08 |
---|