
#13235: 팰린드롬
[문제]
[코드]
#include<stdio.h>
#include<string.h>
int main()
{
int left, right;
char word[21];
scanf("%s", &word);
for (left = 0, right = strlen(word) - 1; left <= right; left++, right--)
{
if (word[left] != word[right])
break;
}
printf("%s\n", left > right ? "true" : "false");
return 0;
}
[코드설명]
left는 word의 왼쪽 인덱스, right는 오른쪽 인덱스를 나타낸다. word 배열에 단어를 입력 받은 후 for문이 동작하는데 left는 0, right는 입력된 word 배열의 마지막 문자 인덱스에서 시작한다. left는 증가하고 right는 감소하면서 word[left]와 word[right]가 다른지 검사하고, 다르다면 for문을 종료한다.
for문이 종료된 경우는 두 가지 경우로 나누어 볼 수 있다. 첫 번째는 위처럼 word[left]와 word[right]가 달라 break로 종료된 경우다. 두 번째는 모든 검사를 무사히 통과하고 left가 right보다 커지면서 종료된 경우다. 때문에 left와 right의 비교관계로 word가 팰린드롬인지 아닌지를 알아낼 수 있다.
left가 right보다 크다면 for문이 끝까지 실행된 후 종료된 것이므로 word는 팰린드롬이고, 그렇지 않다면 중간에 break문으로 종료된 것이므로 팰린드롬이 아니다. 조건 연산자를 사용해서 left > right가 참일 경우 true를 출력하고 거짓일 경우 false를 출력하게 했다.
[채점 결과]
#2908: 상수
[문제]
[코드]
#include<stdio.h>
#include<math.h>
int main()
{
int num[2], snum[2] = { 0 };
scanf("%d %d", &num[0], &num[1]);
for (int i = 0; i < 2; i++)
{
for (int j = 2; j >= 0; j--)
{
snum[i] += (num[i] % 10) * pow(10, j);
num[i] /= 10;
}
}
printf("%d\n", snum[0] > snum[1] ? snum[0] : snum[1]);
return 0;
}
[코드설명]
num 배열에 숫자를 입력 받고, num[i]에서 10으로 나눈 나머지를 pow(10, j) 값과 곱해서 snum[1]에 더해줬다.
j는 2부터 시작해서 0으로 끝나므로 pow(10, j)는 차례로 100, 10, 1이 되고, num[i] % 10은 차례로 num[i]의 1의 자리, 10의 자리, 100의 자리 값이 된다. 이 둘을 곱해서 snum[i]에 더하면 자릿수가 뒤바뀐 "상수"가 보는 숫자가 된다.
snum[0]과 snum[1]의 값을 비교해서 더 큰 수를 출력했다.
[채점 결과]
'알고리즘' 카테고리의 다른 글
[HackerRank] 2D Array - DS / Intro to Tutorial Challenges (0) | 2021.04.01 |
---|---|
[HackerRank] Arrays - DS / Equal Stacks (0) | 2021.03.24 |
[BOJ] 4673/16503 (0) | 2021.02.17 |
[BOJ] 1316/2869 (0) | 2021.02.07 |
[BOJ] 2748/2750 (0) | 2021.02.01 |