입력 코드
#include <stdio.h>
int main(void)
{
int num;
while (1)
{
scanf("%d", &num);
if (num == 0)
return 0;
int reverse_num = 0;
int temp = num;
while (num > 0)
{
reverse_num *= 10;
reverse_num += (num % 10);
num /= 10;
}
if (temp == reverse_num)
printf("yes\n");
else
printf("no\n");
}
return 0;
}
코드 설명
배열 / 수 뒤집기를 이용하는 문제
#include <stdio.h>
#include <string.h>
main() {
int i,j;
char s[100000];
scanf("%s", s);
int l = strlen(s);
int m = l / 2;
if((l%2)==0)
for (j = 0; j < m; j++) {
if (s[m - j] == s[m + j])
printf("yes\n");
else
printf("no\n");
}
else
for (j = 0; j < m; j++) {
if (s[m - j-1] == s[m + j])
printf("yes\n");
else
printf("no\n");
}
}
처음에는 문자열 길이가 짝수일때와 홀수일때 경우를 나눠서 문자열의 가운데를 기준으로 비교했다. 그런데 반복문을 돌면서 전체적으로 조건문을 만족하면 yes/no를 출력하는 게 아니라 비교할때마다 출력하도록 작성한 것이었다.
2021/01/04 - [C] - #8. [백준_C언어] 2920번 : 음계
이 문제랑 약간 비슷한 것 같았다.
#include <stdio.h>
#include <string.h>
main() {
int i,j,p;
char s[100000];
scanf("%s", s);
int l = strlen(s);
int m = l / 2;
if((l%2)==0)
for (j = 0; j < m; j++) {
if (s[m - j] == s[m + j])
p = 1;
else
p = 2;
}
else
for (j = 0; j < m; j++) {
if (s[m - j - 1] == s[m + j])
p = 1;
else
p = 2;
}
if (p == 1)
printf("yes\n");
else if (p == 2)
printf("no\n");
}
그래서 새로운 변수를 설정하고 다시 반복문을 작성했는데도 결과가 제대로 출력되지 않았다. 그리고 0으로 입력이 끝나는 게 아니라 한 번밖에 입력하지 못했다.
시간 초과로 찾아봤더니 수 뒤집기를 활용해서 풀 수도 있는 문제였다.
↓↓↓ 참고한 사이트
↑↑↑ 이건 내가 원래 하려던 방법
velog.io/@yujo/BOJ-1259-%ED%8C%B0%EB%A6%B0%EB%93%9C%EB%A1%AC%EC%88%98
blog.naver.com/tipsware/221287499666
문제 출처
'C' 카테고리의 다른 글
#20. [백준_C언어] 10250 : ACM 호텔 (0) | 2021.01.08 |
---|---|
#19. [백준_C언어] 2798 : 블랙잭 (0) | 2021.01.08 |
#17. [백준_C언어] 1085 : 직사각형에서 탈출 (0) | 2021.01.07 |
#16. [백준_C언어] 11720 : 숫자의 합 (0) | 2021.01.06 |
#15. [백준_C언어] 11654번 : 아스키 코드 (0) | 2021.01.06 |