article thumbnail image
Published 2021. 2. 22. 23:49

#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
복사했습니다!