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

[백준] 2839번 문제풀이

by JR2 2021. 4. 1.

문제 : www.acmicpc.net/problem/2839

#include <stdio.h>

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

	int count = 0;
	while (1)
	{
		if (n == 0) { break; }
		if (n % 5 == 0) { n -= 5; count++; continue; }
		if (n % 8 == 0) { n -= 8; count += 2; continue; }
		if (n % 3 == 0) { n -= 3; count++; continue; }
		if (n >= 5) { n -= 5; count++; continue; }
		if (n >= 8) { n -= 8; count += 2; continue; }
		if (n >= 3) { n -= 3; count++; continue; }
		count = -1;
		break;
	}

	printf("%d", count);

	return 0;
}

기존에 내가 생각했던 알고리즘은 위와 같다..

왜 저렇게 꼬아서 생각했는지는 잘 모르겠지만, 합격은 하였으니 반성만 하고 넘어가면 된다.

 

5로 나눌 수 있으면 나누고, 나눌 수 없다면 3을 빼주면 된다. ㅋㅋㅋ 너무 쉬운걸 어렵게 돌아서 생각했다.

따라서 최종코드는 아래와 같다.

#include <stdio.h>

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

	int count = 0;
	while (1)
	{
		if (n % 5 == 0) { count = count + (n / 5); break; }
		if (n >= 3) { n -= 3; count++; continue; }
		count = -1;
		break;
	}

	printf("%d", count);

	return 0;
}

성능에도 차이가 있고, 직관적으로도 보기가 안좋은 코드였다.

쉽게 생각하자 쉽게.

 

문제 푼 시간 : 49분39초

댓글