팰린드롬에 대한 문제입니다.
문제에 나와있다시피, radar 와 sees 같이 뒤에서부터 읽어도 똑같다면 그 단어는 팰린드롬입니다.
숫자도 마찬가지로, 121 이나 12421 같이 뒤에서부터 읽어도 똑같으면 팰린드롬수 입니다.
숫자를 입력받아 팰린드롬수인지 아닌지 판별하는 프로그램을 작성해 봅시다.
1. 0이 입력될 때까지 종료되지 않아야 하므로 무한루프에 0이 입력되면 종료되도록 하는 조건을 넣습니다.
while (1)
{
scanf("%d", &num);
if (num == 0) // num이 0이면 종료
{
return 0;
}
}
2. 입력받은 num의 자리수를 세고,
number 배열에는 그대로, check 배열에는 역순으로 넣습니다. (비교하기 쉽도록 배열에 옮겨담았습니다.)
int temp = num;
int count = 0; // num의 자리수 세기
while (temp != 0)
{
temp /= 10;
count++;
}
for (int i = 0; i < count; i++) // num의 자리수만큼 반복, 배열에 값 넣기
{
check[i] = num / (int)pow(10, i) % 10;
number[count - 1 - i] = check[i];
}
3. 이제 number 배열과 check 배열을 비교합니다.
다르면 ans=0, 같으면 ans=1 입니다.
마지막으로 ans값에 따라 yes 혹은 no를 출력해주면 끝이 납니다.
int ans = 0;
for (int i = 0; i < count; i++)
{
if (number[i] == check[i])
{
ans = 1;
}
else
{
ans = 0;
break;
}
}
if (ans == 1)
{
printf("yes\n");
}
else
{
printf("no\n");
}
1~3 번 과정을 0이 입력되기 전까지 무한 반복합니다.
전체 코드)
#include <stdio.h>
#include <math.h>
int main(void)
{
int num = 0;
int number[6] = {0}; // num 입력받아 그대로 넣을 배열
int check[6] = {0}; // num의 역순을 넣을 배열
while (1)
{
scanf("%d", &num);
if (num == 0) // num이 0이면 종료
{
return 0;
}
int temp = num;
int count = 0; // num의 자리수 세기
while (temp != 0)
{
temp /= 10;
count++;
}
for (int i = 0; i < count; i++) // num의 자리수만큼 반복, 배열에 값 넣기
{
check[i] = num / (int)pow(10, i) % 10;
number[count - 1 - i] = check[i];
}
int ans = 0;
for (int i = 0; i < count; i++)
{
if (number[i] == check[i])
{
ans = 1;
}
else
{
ans = 0;
break;
}
}
if (ans == 1)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
return 0;
}
두 배열을 비교하는 재미있는 문제인 것 같습니다.
'백준 > c' 카테고리의 다른 글
백준_2775_부녀회장이될테야 (0) | 2024.04.28 |
---|---|
백준_2869_달팽이는올라가고싶어 (2) | 2024.04.28 |
백준_10811_바구니뒤집기 (0) | 2024.04.24 |
백준_10810_공넣기 (0) | 2024.04.24 |
백준_25304_영수증 (0) | 2024.04.24 |