백준 알고리즘 1463번 : 1로 만들기
#include <stdio.h>
#define MIN(a, b) (((a) < (b)) ? (a) : (b));
int memo[1000001] = { 0, };
int make_one(int x)
{
if (x == 1)
return (0);
else if (memo[x] != 0)
return (memo[x]);
else
{
memo[x] = make_one(x - 1) + 1;
if (!(x % 3))
memo[x] = MIN(memo[x], (make_one(x / 3) + 1));
if (!(x % 2))
memo[x] = MIN(memo[x], (make_one(x / 2) + 1));
}
return (memo[x]);
}
int main(void)
{
int x = 0;
memo[1] = 0;
memo[2] = 1;
memo[3] = 1;
scanf("%d", &x);
printf("%d", make_one(x));
}
백준 알고리즘 2164번 : 카드2
#include <stdio.h>
#include <stdlib.h>
int find_front(int front, int n, int* card)
{
while (front <= n)
{
if (front == n)
front = 1;
if (card[++front] == 1)
break;
}
return (front);
}
int main(void)
{
int n;
int* card;
int front = 1, back;
scanf("%d", &n);
card = (int*)malloc(sizeof(int) * (n + 1));
for (int i = 0; i < n + 1; i++)
card[i] = 1;
back = n;
while (n != 1)
{
card[front] = 0;
front = find_front(front, n, card);
if (front == back)
break;
back = front;
front = find_front(front, n, card);
}
free(card);
printf("%d", front);
return (0);
}
😂
- 이거 푸는 데 시간도 꽤 걸리고 너무 힘든 건 내가 공부를 하기 싫기 때문일까,,?