반응형
초심자의 회문 검사 문제. 회문은 거꾸로 읽어도 같은 문자를 말한다. 내 이름은 이효리 거꾸로 해도 이효리. 영어로는 Palindrome, 팰린드롬이라고 한다. 레벨4 문제를 풀다가 팰린드롬이란 말이 나왔는데 아무 설명도 없어서 따로 찾아봤다. 알아둬야할 듯.
문제
단어를 입력 받아 회문이면 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을 출력한다.
반응형
'DEVELOP > Algorithm' 카테고리의 다른 글
[C] SW Expert Academy 문제풀이 :: 1961번 (0) | 2018.09.19 |
---|---|
[C] SW Expert Academy 문제풀이 :: 1966 번 (0) | 2018.09.17 |
[C] SW Expert Academy 문제풀이 :: 5431번 (0) | 2018.09.14 |
[C] SW Expert Academy 문제풀이 :: 5356번 (0) | 2018.09.13 |
[C] SW Expert Academy 문제풀이 :: 1970번 (0) | 2018.09.11 |
[C] SW Expert Academy 문제풀이 :: 2001번 (0) | 2018.09.08 |
[C] SW Expert Academy 문제풀이 :: 2005번 (0) | 2018.09.07 |
[C] SW Expert Academy 문제풀이 :: 1926번 (0) | 2018.09.06 |