본문 바로가기
프로그래밍/개발 이야기

[백준] 16953번 문제풀이

by JR2 2021. 4. 5.

기존에 나는 B에서 나누고, 빼서 A가 된다면 Count를 출력하고, 되지 않는다면 -1 를 출력하는 알고리즘을 계획했었다.

 

계획에는 전혀 문제가 없어보였다.

그래서 나온 코드가 아래와 같다.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void)
{
	int a, b;
	scanf("%d %d", &a, &b);

	int count = 0;
	while (b > a)
	{
		if (b % 2 == 0) { b = b / 2; }
		else { b = b / 10; }
		count++;
	}

	if (b == a)
		printf("%d", count + 1);
	else
		printf("-1");
	return 0;
}

하지만 Pass가 되지 않았다.

1 <= a < b < 10^9 이기 때문에 int형으로 충분히 사용가능했다.

 

그 이유를 분석하다가 보니 5 4044 가 되지 않아야 하는데, 되는 것을 발견하고

아래와 같이 수정하였더니 통과했다.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main(void)
{
	int a, b;
	scanf("%d %d", &a, &b);

	int count = 0;
	while (b > a)
	{
		if (b % 2 == 0) { b = b / 2; }
		else if (b % 10 == 1) { b = b / 10; }
		else { break; }
		count++;
	}

	if (b == a)
		printf("%d", count + 1);
	else
		printf("-1");
	return 0;
}

걸린시간 : 58분 (10분 알고리즘 + 48분 구현 + Debugging)

댓글