γ€ŒβŒ¨οΈα΄„s」PS/λ°±μ€€_λ¬Έμžμ—΄

[Baekjoon/λ°±μ€€][1259][C/C++] νŒ°λ¦°λ“œλ‘¬μˆ˜

λ£¨λ°€π•ƒπ•¦π•„π•šπ•£ 2023. 2. 8. 10:00
728x90
λ°˜μ‘ν˜•
γ€Žλͺ©μ°¨γ€
0. κ°œμš”

1. 문제
2. 풀이
3. μ½”λ“œ

0. κ°œμš”

κ΅¬ν˜„, λ¬Έμžμ—΄ 문제. μ•žμœΌλ‘œ μˆ˜μ—†μ΄ λ‚˜μ˜¬ νŒ°λ¦°λ“œλ‘¬ 문제의 μ„œλ§‰μ΄λ‹€.

1. 문제

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

 

1259번: νŒ°λ¦°λ“œλ‘¬μˆ˜

μž…λ ₯은 μ—¬λŸ¬ 개의 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ‘œ 이루어져 있으며, 각 μ€„λ§ˆλ‹€ 1 이상 99999 μ΄ν•˜μ˜ μ •μˆ˜κ°€ 주어진닀. μž…λ ₯의 λ§ˆμ§€λ§‰ μ€„μ—λŠ” 0이 주어지며, 이 쀄은 λ¬Έμ œμ— ν¬ν•¨λ˜μ§€ μ•ŠλŠ”λ‹€.

www.acmicpc.net

[문제]

μ–΄λ–€ 단어λ₯Ό λ’€μ—μ„œλΆ€ν„° 읽어도 λ˜‘κ°™λ‹€λ©΄ κ·Έ 단어λ₯Ό νŒ°λ¦°λ“œλ‘¬μ΄λΌκ³  ν•œλ‹€. 'radar', 'sees'λŠ” νŒ°λ¦°λ“œλ‘¬μ΄λ‹€.

μˆ˜λ„ νŒ°λ¦°λ“œλ‘¬μœΌλ‘œ μ·¨κΈ‰ν•  수 μžˆλ‹€. 수의 μˆ«μžλ“€μ„ λ’€μ—μ„œλΆ€ν„° 읽어도 κ°™λ‹€λ©΄ κ·Έ μˆ˜λŠ” νŒ°λ¦°λ“œλ‘¬μˆ˜λ‹€. 121, 12421 등은 νŒ°λ¦°λ“œλ‘¬μˆ˜λ‹€. 123, 1231은 λ’€μ—μ„œλΆ€ν„° 읽으면 λ‹€λ₯΄λ―€λ‘œ νŒ°λ¦°λ“œλ‘¬μˆ˜κ°€ μ•„λ‹ˆλ‹€. λ˜ν•œ 10도 νŒ°λ¦°λ“œλ‘¬μˆ˜κ°€ μ•„λ‹Œλ°, μ•žμ— λ¬΄μ˜λ―Έν•œ 0이 올 수 μžˆλ‹€λ©΄ 010이 λ˜μ–΄ νŒ°λ¦°λ“œλ‘¬μˆ˜λ‘œ μ·¨κΈ‰ν•  μˆ˜λ„ μžˆμ§€λ§Œ, νŠΉλ³„νžˆ 이번 λ¬Έμ œμ—μ„œλŠ” λ¬΄μ˜λ―Έν•œ 0이 μ•žμ— 올 수 μ—†λ‹€κ³  ν•˜μž.

[μž…λ ₯]

μž…λ ₯은 μ—¬λŸ¬ 개의 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ‘œ 이루어져 있으며, 각 μ€„λ§ˆλ‹€ 1 이상 99999 μ΄ν•˜μ˜ μ •μˆ˜κ°€ 주어진닀. μž…λ ₯의 λ§ˆμ§€λ§‰ μ€„μ—λŠ” 0이 주어지며, 이 쀄은 λ¬Έμ œμ— ν¬ν•¨λ˜μ§€ μ•ŠλŠ”λ‹€.

[좜λ ₯]

각 μ€„λ§ˆλ‹€ 주어진 μˆ˜κ°€ νŒ°λ¦°λ“œλ‘¬μˆ˜λ©΄ 'yes', μ•„λ‹ˆλ©΄ 'no'λ₯Ό 좜λ ₯ν•œλ‹€.

[예제 μž…λ ₯ 1]

121
1231
12421
0

[예제 좜λ ₯ 1]

yes
no
yes

2. 풀이

풀이에 μ•žμ„œ

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

핡심 κ°œλ…

숫자λ₯Ό 문자둜 μ·¨κΈ‰ν•˜μ—¬, 숫자λ₯Ό λ¬Έμžμ—΄ 배열상에 문자 ν˜•μ‹μœΌλ‘œ μž…λ ₯λ°›μ•„ ν’€λ©΄ μ‰½κ²Œ ν’€ 수 μžˆλ‹€.

문제 풀이

/* μ„ μ–Έ */

99999 μ΄ν•˜μ˜(μ΅œλŒ€ 5자리) μ •μˆ˜κ°€ μž…λ ₯으둜 λ“€μ–΄μ˜€λ―€λ‘œ, λ°°μ—΄μ˜ κΈΈμ΄λŠ” μ΅œλŒ€ 5둜 작으면 λœλ‹€. μ΄λ•Œ, '\n'κ³Ό '\0'이 λ“€μ–΄μ˜€κΈ° μœ„ν•΄ 2칸의 μ—¬μœ  곡간이 ν•„μš”ν•˜λ―€λ‘œ, μ΅œμ’…μ μœΌλ‘œ λ°°μ—΄μ˜ 길이λ₯Ό 7둜 μ„ μ–Έν•˜λ©΄ λœλ‹€.

 

/* νŒ°λ¦°λ“œλ‘¬ μ—¬λΆ€ νŒλ‹¨ λ³€μˆ˜ μ„ μ–Έ */

true, false μ—¬λΆ€λ§Œ νŒλ‹¨ν•˜λ©΄ λ˜λ―€λ‘œ boolν˜• λ³€μˆ˜λ‘œ μ„ μ–Έν•˜μ˜€λ‹€.


/* λ¬Έμžμ—΄ μž…λ ₯받은 ν›„, κ°œν–‰λ¬Έμž 제거 */
fgetsν•¨μˆ˜λ₯Ό 톡해 μž…λ ₯된 κ°œν–‰λ¬Έμžλ₯Ό μ œκ±°ν•œλ‹€.


/* 0값이 μž…λ ₯된 경우, μ’…λ£Œ */
0값이 μž…λ ₯된 경우, λ°˜λ³΅λ¬Έμ„ νƒˆμΆœν•œλ‹€.


/* νŒ°λ¦°λ“œλ‘¬ μ—¬λΆ€ νŒλ‹¨ */

'λ°°μ—΄μ˜ 첫 번째 μˆ«μžμ™€ λ§ˆμ§€λ§‰ 숫자λ₯Ό 비ꡐ, 두 번째 μˆ«μžμ™€ λ§ˆμ§€λ§‰μ—μ„œ 두 번째 숫자λ₯Ό 비ꡐ, ...' ν•˜λ©΄μ„œ λ°°μ—΄μ˜ λ§ˆμ§€λ§‰κΉŒμ§€ 비ꡐλ₯Ό λ°˜λ³΅ν•΄ λ‚˜κ°€λ©΄ λœλ‹€. (μ΄λ•Œ, μ—°μ‚° 횟수λ₯Ό 쀄이기 μœ„ν•΄ λ°°μ—΄μ˜ μ€‘κ°„κΉŒμ§€λ§Œ 비ꡐλ₯Ό μˆ˜ν–‰ν•˜μ—¬λ„ μƒκ΄€μ—†μ§€λ§Œ, μ½”λ“œμ˜ 간단함을 μœ„ν•΄ κ·Έλƒ₯ λ°°μ—΄μ˜ λκΉŒμ§€ 비ꡐλ₯Ό μ§„ν–‰ν•˜μ˜€λ‹€.)

3. μ½”λ“œ

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

int main(int argc, char* argv[]) {
	/* μ„ μ–Έ */
	char palin[7]; // '\0', '\n' 포함.
	
	while (true) {
		/* νŒ°λ¦°λ“œλ‘¬ μ—¬λΆ€ νŒλ‹¨ λ³€μˆ˜ μ„ μ–Έ */
		bool ispalin = true;

		/* λ¬Έμžμ—΄ μž…λ ₯ 받은 ν›„, κ°œν–‰λ¬Έμž 제거 */
		fgets(palin, sizeof(palin), stdin);
		if (palin[strlen(palin) - 1] == '\n')
			palin[strlen(palin) - 1] = '\0';

		/* 0값이 μž…λ ₯된 경우, μ’…λ£Œ */
		if (strlen(palin) == 1 && palin[0] == '0')
			break;

		/* νŒ°λ¦°λ“œλ‘¬ μ—¬λΆ€ νŒλ‹¨ */
		for (int i = 0; i < strlen(palin); i++)
			if (palin[i] != palin[strlen(palin) - 1 - i])
				ispalin = false;

		/* 좜λ ₯ */
		if (ispalin == false)
			printf("no\n");
		else if (ispalin == true)
			printf("yes\n");
	}

	return 0;
}
728x90
λ°˜μ‘ν˜•