본문 바로가기
백준(C언어)/23년 7월

[C] 백준 - 16953번: A -> B

by C0MPAS 2023. 7. 26.

7월 26일(수) - 그리디 알고리즘 (16953번)

 

16953번: A → B

첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.

www.acmicpc.net

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

최초 생각 정리

- A와 B의 크기비교가 가장 중요한 조건이라는 판단을 하게되었다

- A==B인 상황이라면, 그때 변수 count를 출력하고

  A<B인 상황이라면, 지속적으로 B의 크기를 줄여가야하며

  A>B인 상황이라면, 더 이상 연산을 진행하기는 것이 불가능한 상황이므로 바로 -1을 출력한다

 

- 따라서 A<=B인 조건에서 while문을 돌리면서 A==B인 상황과, A<B인 상황으로 나누어서 진행한다

- A>B인 상황이라서 while문에 진입을 하지 못한다면, -1을 출력한다

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

문제점

1.  그리디 알고리즘...을 어디서 사용해야하는지를 모르겠다

-> 다른 풀이 참고해볼 것

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

풀이 - 1

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)

#include <stdio.h>

int main(void)
{
	int A, B;
	scanf("%d %d", &A, &B);

	int count = 0;
	while (A <= B)
	{
		count++;
		if (A == B)
		{
			printf("%d", count);
			break;
		}

		else
		{

			if (B % 10 == 1)
			{
				B--;
				B = B / 10;
			}
			else if (B % 2 == 0)
			{
				B = B / 2;
			}
			else
			{
				printf("-1");
				break;
			}

		}
	}

	if (A > B)
	{
		printf("-1");
	}

	return 0;
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

풀이 - 2

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

댓글