기존에 나는 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)
'프로그래밍 > 개발 이야기' 카테고리의 다른 글
[백준] 13305번 문제풀이 (2) | 2021.04.06 |
---|---|
[백준] 11399번 문제풀이 (0) | 2021.04.05 |
[백준] 11047번 문제풀이 (0) | 2021.04.03 |
[자료구조] Priority Queue 우선순위 큐 (0) | 2021.04.03 |
[자료구조] Queue의 En,Dequeue를 이용해서 출력을 반전시켜보자 (0) | 2021.04.03 |
댓글