본문 바로가기

DEVELOP/Algorithm

[C] SW Expert Academy 문제풀이 :: 1989번

반응형


초심자의 회문 검사 문제. 회문은 거꾸로 읽어도 같은 문자를 말한다. 내 이름은 이효리 거꾸로 해도 이효리. 영어로는 Palindrome, 팰린드롬이라고 한다. 레벨4 문제를 풀다가 팰린드롬이란 말이 나왔는데 아무 설명도 없어서 따로 찾아봤다. 알아둬야할 듯.



문제


https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PyTLqAf4DFAUq&categoryId=AV5PyTLqAf4DFAUq&categoryType=CODE


단어를 입력 받아 회문이면 1을 출력하고, 아니라면 0을 출력하는 프로그램을 작성하라.



풀이



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <string.h>
 
int main() {
    int tc;
    scanf("%d"&tc);
 
    for (int t = 0; t < tc; t++) {
        char word[10 + 1];
        scanf("%s", word);
        char cmp[10 + 1];
        int len = strlen(word);
 
        for (int i = 0; i < len; i++) {
            cmp[i] = word[len - 1 - i];
        }
        
        cmp[len] = '\0';
 
        if (strcmp(cmp, word) == 0) {
            printf("#%d 1\n", t+1);
        }
        else {
            printf("#%d 0\n", t+1);
        }
    }
}
cs


최대 길이가 10이므로 10+1만큼의 문자열 배열 공간을 만들어준다.


단어를 입력받는다.


단어를 거꾸로 집어넣고 원래 단어와 비교할 공간인 cmp를 마찬가지로 10+1만큼 공간을 만들어준다.


루프를 돌리기 위해 len 변수에 strlen(word) 함수의 리턴값을 집어넣는다. 이 때 <string.h> 헤더가 필요하다.


i=0부터 i<len까지, 즉 단어의 길이만큼 루프를 돌린다.

단어의 길이가 10이라면 cmp[0]에는 word[10-1-0]=word[9], 즉 단어의 10번째 문자를 넣어준다. for문의 i가 커질 수록 cmp[1]에는 word[8]... cmp[9]는 word[0]이 된다.


이것은 문자열이기 때문에 cmp[len], 즉 배열의 모든 공간에 글자를 집어넣고 바로 다음 공간에 '\0', 즉 null 문자를 넣어준다. 이렇게 cmp는 문자열이 된다.


그리고 strcmp()함수를 이용해 cmp와 word를 비교한다. 두 단어가 같으면 0을 리턴한다. 그래서 같으면 회문이므로 1을 출력하고 그 외의 경우는 회문이 아니므로 0을 출력한다.

반응형