팰린드롬
palindorme
'level', 'kayak' 처럼 거꾸로 읽어도 바로 읽었을 때와 철자가 같은 문장이나 단어를 뜻한다.
동기들과 백준 알고리즘 스터디를 시작했는데,
첫 주차 문제중 가장 재미있다고 생각한 문제가 '팰린드롬 문제' 였다
우선 간단히 기본적인 변수 선언을 해주고,
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main(void)
{
//변수 선언
char c[100];
int i ,result = 0;
scanf("%s", c); //문자열 입력
|
cs |
홀수와 짝수인 경우로 나누어 코드를 작성해보았다
아래 코드를 작성하면서 처음 알게된 것은 strlen()이라는 함인데,
문자열의 길이를 정수값으로 반환해주는 함수이다
파이썬으로 치면 len() 함수와 같은 것 같다
(아니 요 아래 인용문 기호가 없어지질 않네..)
12345678910111213141516171819202122 if ((strlen(c) % 2 )!= 0) //문자열의 길이가 홀수인 경우{for (i = 0; i < strlen(c) / 2; i++) //정가운데 문자를 제외하고 같음을 비교{if (c[i] == c[strlen(c) - 1 - i])result += 0; //팰린드롬인 경우elseresult += 1; //팰린드롬이 아닌 경우}}else //문자열의 길이가 짝수인 경우{for (i = 0; i < strlen(c) / 2; i++) //정가운데 문자 포함해서 같음을 비교{if (c[i] == c[strlen(c) - 1 - i])result += 0; //팰린드롬인 경우elseresult += 1; //팰린드롬이 아닌 경우}} 1)문자열의 길이가 홀수인 경우문자열의 길이가 홀수인 경우에는 정 가운데 문자를 기준으로 양 옆의 문자들이 각각 짝을 이루고 있으므로,
이를 for문을 이용하여 비교하면 된다
비교할때 result = 0 정수변수를 미리 정의하고 팰린드롬인 경우에(양 옆의 문자들 각각이 같을 때) result 의 값에 0을 계속 더하도록 구현하였고,
그 외의 경우(팰린드롬이 아닌 경우)에는 result에 1을 더하여 result 값이 0이 되지 않도록 구현하였다
2)문자열의 길이가 짝수인 경우
문자열의 길이가 짝수인 경우도 홀수인 경우와 마찬가지의 메커니즘을 따라간다
다만 다른점은 for문에서 i에 대한 조건식이 다르다는 점 하나 뿐이다
14
15
16
17
18
19
20
21
22
|
//결과 출력
if (result == 0) //팰린드롬인 경우
printf("%d", 1);
else //팰린드롬이 아닌 경우
printf("%d", 0);
return 0;
}
|
cs |
홀수인 경우와 짝수인 경우의 코드를 잘 작성하면
결과 출력은 심플하다
result 값을 기준으로 최종적으로 팰린드롬의 여부를 판단하기 때문이다코멘트
'python' 카테고리의 다른 글
문자열 포맷 방법 (0) | 2023.06.24 |
---|---|
문자열 관련 함수 정리 (0) | 2023.06.24 |
scanf()함수 입력오류(입력버퍼) (0) | 2022.07.02 |
scanf()의 반환값 (0) | 2022.07.02 |
완전수 구하기 (0) | 2022.07.02 |