문제 : 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초
'프로그래밍 > 개발 이야기' 카테고리의 다른 글
[자료구조] Queue의 En,Dequeue를 이용해서 출력을 반전시켜보자 (0) | 2021.04.03 |
---|---|
[자료구조] Stack의 push, pop을 이용한 출력 (0) | 2021.04.03 |
[알고리즘] 최대 Subarray 찾기 (0) | 2021.03.26 |
메이커스페이스 레이저커팅기 이용방법 (0) | 2021.03.14 |
[퓨전360] 3D모델링 파일을 dfx 파일로. 레이저 커팅하기 (0) | 2021.03.11 |
댓글