#include <iostream>
#include <algorithm>
using namespace std;
 
int N;
int dp[1010];
 
int solve(int cnt)
{
    if(cnt < 0)
    {
        return 0;
    }
    else if(cnt == 0)
    {
        return 1;
    }
    
    if(dp[cnt] != 0)
    {
        return dp[cnt];
    }
 
    dp[cnt] = (solve(cnt-1+ solve(cnt-2)) % 10007;
    
    return dp[cnt];
}
 
int main(void)
{
//    freopen("B11726_input.txt", "r", stdin);
    
    cin >> N;
    
    cout << solve(N); 
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
using namespace std;
 
int num;
int dp[1000010];
 
int solve(int n)
{
    if(n == 1)
    {
        return 0;
    }
    
    if(dp[n] != 99999999)
    {
        return dp[n];
    }
    
    if(n % 3 == 0)
    {
        dp[n] = min(dp[n], solve(n/3+ 1);
    }
    
    if(n % 2 == 0)
    {
        dp[n] = min(dp[n], solve(n/2+ 1);
    }
    
    if(n - 1 != 0)
    {
        dp[n] = min(dp[n], solve(n-1+ 1);
    }
    
    return dp[n];
}
 
int main(void)
{
//    freopen("B1463_input.txt", "r", stdin);
    
    cin >> num;
 
    for(int i = 0; i < 1000010; i++)
    {
        dp[i] = 99999999;
    }
    
    cout << solve(num);
    
    return 0;
}
cs
#include <stdio.h>
#include <iostream>
#include <set>
#include <map>
#include <queue>
#include <vector>
#include <string>
#include <math.h>
#include <algorithm>
using namespace std;
 
string s;
int cnt0, cnt1;
 
int main(void)
{
//    freopen("B1439_input.txt", "r", stdin);
    
    cin >> s;
    
    for(int i = 0; i < s.size(); i++)
    {
        if(s[i] == '1' && s[i] != s[i+1])
        {
            cnt1++;
        }
        else if(s[i] == '0' && s[i] != s[i+1])
        {
            cnt0++;
        }
    }
    
    cout << min(cnt1, cnt0);
    
    return 0;
}
cs
#include <stdio.h>
#include <iostream>
#include <set>
#include <map>
#include <queue>
#include <vector>
#include <string>
#include <math.h>
#include <algorithm>
using namespace std;
 
string board;
string ans;
 
int main(void)
{
//    freopen("B1343_input.txt", "r", stdin);
    
    cin >> board;
    
    for(int i = 0; i < board.size();)
    {
        if(board[i] == '.')
        {
            ans += '.';
            i += 1;
            
            continue;
        }
        
        int cnt = 0;
        
        for(int j = i; j < board.size() && board[j] == 'X'; j++)
        {
            cnt++;
        }
        i += cnt;
        
        if(cnt % 2 == 1)
        {
            cout << "-1";
            return 0;
        }
        
        while(1)
        {
            if(cnt >= 4)
            {
                ans += "AAAA";
                cnt -= 4;
            }
            else if(cnt == 2)
            {
                ans += "BB";
                cnt -= 2;
            }
            else
            {
                break;
            }
        }
    }
    
    cout << ans;
    
    return 0;
}
cs

'Baekjoon > Greedy' 카테고리의 다른 글

[백준 11047] 동전 0 (Greedy) (C/C++)  (0) 2020.03.07
#include <stdio.h>
#include <iostream>
#include <set>
#include <map>
#include <queue>
#include <vector>
#include <string>
#include <math.h>
#include <algorithm>
using namespace std;
 
int N;
long long num[2010];
int Left, Right;
int ans;
 
int main(void)
{
//    freopen("B1253_input.txt", "r", stdin);
    
    cin >> N;
    
    for(int i = 1; i <= N; i++)
    {
        cin >> num[i];
    }
    
    sort(num+1, num+N+1);
    
    for(int i = 1; i <= N; i++)
    {
        long long find = num[i];
        Left = 1;
        Right = N;
        
        // 투포인터 알고리즘 활용 
        while(Left < Right)
        {    
            if(num[Left] + num[Right] == find)
            {
                // find는 서로 다른 두 수의 합이여야됨을 체크 
                if(Left != i && Right != i)
                {
                    ans++;
                    break;    
                }
                else if(Left == i)
                {
                    Left++;
                }
                else if(Right == i)
                {
                    Right--;
                }
            }
            else if(num[Left] + num[Right] < find)
            {
                Left++;
            }
            else
            {
                Right--;
            } 
        }
    }
    
    cout << ans;
    
    return 0;
}
cs
#include <stdio.h>
#include <iostream>
#include <set>
#include <map>
#include <queue>
#include <vector>
#include <string>
#include <math.h>
#include <algorithm>
using namespace std;
 
int N, S;
int num[21];
int choice[21];
int ans;
 
int check(int cnt)
{
    int sum = choice[0];
    
    for(int i = 1; i < cnt; i++)
    {
        sum += choice[i];
    }
    
    if(sum == S)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
 
 
void combination(int idx, int cnt)
{
    if(cnt > N)
    {
        return;
    }
    else if(cnt != 0)
    {
        if(check(cnt) == 1)
        {
            ans++;
        }
    }
    
    for(int i = idx; i < N; i++)
    {
        choice[cnt] = num[i];
        combination(i+1, cnt+1);
    }
}
 
int main(void)
{
//    freopen("B1182_input.txt", "r", stdin);
    
    cin >> N >> S;
    
    for(int i = 0; i < N; i++)
    {
        cin >> num[i];
    }
    
    combination(00);
    
    cout << ans;
    
    return 0;
}
cs

'Baekjoon > etc' 카테고리의 다른 글

[백준 1439] 뒤집기 (C/C++)  (0) 2019.12.30
[백준 1253] 좋다 (C/C++)  (0) 2019.12.30
[백준 1145] 적어도 대부분의 배수 (C/C++)  (0) 2019.12.18
[백준 1065] 한수 (C/C++)  (0) 2019.12.18
[백준 1024] 수열의 합 (C/C++)  (0) 2019.12.17
#include <stdio.h>
#include <iostream>
#include <set>
#include <map>
#include <queue>
#include <vector>
#include <string>
#include <math.h>
#include <algorithm>
using namespace std;
 
int num[5];
int Min = 1;
 
int main(void)
{
//    freopen("B1145_input.txt", "r", stdin);
    
    for(int i = 0; i < 5; i++)
    {
        cin >> num[i];
    }
    
    while(1)
    {
        int cnt = 0;
        
        for(int i = 0; i < 5; i++)
        {
            if(Min >= num[i] && Min % num[i] == 0)
            {
                cnt++;
            }
        }
        
        if(cnt >= 3)
        {
            break;
        }
        
        Min++;
    }
    
    cout << Min;
    
    return 0;
}
cs

'Baekjoon > etc' 카테고리의 다른 글

[백준 1253] 좋다 (C/C++)  (0) 2019.12.30
[백준 1182] 부분수열의 합 (C/C++)  (0) 2019.12.18
[백준 1065] 한수 (C/C++)  (0) 2019.12.18
[백준 1024] 수열의 합 (C/C++)  (0) 2019.12.17
[백준 1015] 수열 정렬 (C/C++)  (0) 2019.12.17
#include <stdio.h>
#include <iostream>
#include <set>
#include <map>
#include <queue>
#include <vector>
#include <string>
#include <math.h>
#include <algorithm>
using namespace std;
 
string num;
 
int main(void)
{
//    freopen("B1065_input.txt", "r", stdin);
    
    cin >> num;
    
    if(num.size() <= 2)
    {
        cout << num << endl;
    }
    else
    {
        int ans = 99;
        
        for(int i = 100; i <= stoi(num); i++)
        {
            string tempNum = to_string(i);
            int diff = tempNum[0]-tempNum[1];
            bool flag = true;
            
            for(int j = 0; j < tempNum.size()-1; j++)
            {
                if(tempNum[j]-tempNum[j+1!= diff)
                {
                    flag = false;
                    break;
                }
            }
            
            if(flag == true)
            {
                ans++;
            }
        }
        
        cout << ans << endl;
    }
    
    return 0;
}
cs

+ Recent posts