#include <iostream>
#include <algorithm>
#include <string>
#include <string.h>
using namespace std;
 
string word;
string Min;
int divideIdx[2];
 
void combination(int idx, int cnt)
{
    if(cnt == 2)
    {
        string first = word.substr(0, divideIdx[0]+1);
        string second = word.substr(divideIdx[0]+1, divideIdx[1]-divideIdx[0]);
        string third = word.substr(divideIdx[1]+1);
        
        reverse(first.begin(), first.end());
        reverse(second.begin(), second.end());
        reverse(third.begin(), third.end());
        
        string temp = first;
        temp += second;
        temp += third;
        
        if(Min > temp)
        {
            Min = temp;
        }
        
        return;
    }
    
    for(int i = idx; i < word.size()-1; i++)
    {
        divideIdx[cnt] = i;
        combination(i+1, cnt+1);
    }
}
 
int main(void)
{
//    freopen("B1251_input.txt", "r", stdin);
    
    cin >> word;
    
    for(int i = 0; i < word.size(); i++)
    {
        Min += "z";
    }
    
    combination(00);
    
    cout << Min;
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
#include <string>
#include <string.h>
using namespace std;
 
string word;
string result;
int alphabet[26];
 
int main(void)
{
//    freopen("B1520_input.txt", "r", stdin);
 
    cin >> word;
 
    for(int i = 0; i < word.size(); i++)
    {
        alphabet[word[i]-'A']++;
    }
    
    if(word.size() % 2 == 1)
    {
        int cnt = 0;
        
        for(int i = 0; i < 26; i++)
        {
            if(alphabet[i] % 2 == 1)
            {
                cnt++;
            }
        }
        
        if(cnt >= 2)
        {
            cout << "I'm Sorry Hansoo";
            return 0;
        }
    }
    else
    {
        for(int i = 0; i < 26; i++)
        {
            if(alphabet[i] % 2 == 1)
            {
                cout << "I'm Sorry Hansoo";
                return 0;
            }
        }
    }
    
    if(word.size() % 2 == 1)
    {
        for(int i = 0; i < 26; i++)
        {
            for(int j = 1; j <= alphabet[i]/2; j++)
            {
                result += ('A' + i);
            }    
            
            if(result.size() == word.size()/2)
            {
                break;
            }
        }    
        
        cout << result;
        
        for(int i = 0; i < 26; i++)
        {
            if(alphabet[i] % 2 == 1)
            {
                cout << char('A' + i);
                break;
            }
        }
        
        reverse(result.begin(), result.end());
        
        cout << result;
    }
    else
    {
        for(int i = 0; i < 26; i++)
        {
            for(int j = 1; j <= alphabet[i]/2; j++)
            {
                result += ('A' + i);
            }    
            
            if(result.size() == word.size()/2)
            {
                break;
            }
        }
        
        cout << result;
        
        reverse(result.begin(), result.end());
        
        cout << result;
    }
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
using namespace std;
 
int N;
int map[110][110];
long long dp[110][110];
 
int dx[2= {01}; // 우하
int dy[2= {10}; // 우하 
 
int safe(int x, int y)
{
    if(x >= 0 && y >= 0 && x < N && y < N)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
 
long long DFS(int x, int y)
{
    if(x == N-1 && y == N-1)
    {
        return 1;
    }
    else if(map[x][y] == 0)
    {
        return 0;
    }
    
    if(dp[x][y] != 0)
    {
        return dp[x][y];
    }
    
    for(int i = 0; i < 2; i++)
    {
        int xpos = x + (dx[i] * map[x][y]);
        int ypos = y + (dy[i] * map[x][y]);    
            
        if(safe(xpos, ypos) == 1)
        {
            dp[x][y] += DFS(xpos, ypos);
        }
    }
    
    return dp[x][y];
}
 
int main(void)
{
//    freopen("B1890_input.txt", "r", stdin);
    
    cin >> N;
    
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < N; j++)
        {
            cin >> map[i][j];
        }
    }
    
    cout << DFS(00);
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
 
int T, N;
long long dp[70];
 
long long solve(int n)
{
    if(dp[n] != 0)
    {
        return dp[n];
    }
    
    for(int i = n-1; i >= n-4; i--)
    {
        dp[n] += solve(i);    
    }
    
    return dp[n];
}
 
int main(void)
{
//    freopen("B9507_input.txt", "r", stdin);
 
    cin >> T;
    
    dp[0= 1, dp[1= 1, dp[2= 2, dp[3= 4;
    
    while(T--)
    {
        cin >> N;
        
        cout << solve(N) << endl;    
    }
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
 
int N;
int dp[1000010];
 
int solve(int n)
{
    if(n == 0)
    {
        return 1;
    }
    else if(n < 0)
    {
        return 0;
    }
    
    if(dp[n] != 0)
    {
        return dp[n];
    }
    
    dp[n] = solve(n-1) % 15746 + solve(n-2) % 15746;
    
    return dp[n] % 15746;
}
 
int main(void)
{
//    freopen("B1904_input.txt", "r", stdin);
 
    cin >> N;
    
    cout << solve(N);
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
 
int N;
int map[100010][3];
int dp_max[2][3];
int dp_min[2][3];
 
int main(void)
{
//    freopen("B2096_input.txt", "r", stdin);
    
    cin >> N;
 
    for(int i = 0; i < N; i++)
    {
        cin >> map[i][0>> map[i][1>> map[i][2];
        
        dp_max[1][0= map[i][0+ max(dp_max[0][0], dp_max[0][1]);
        dp_max[1][1= map[i][1+ max({dp_max[0][0], dp_max[0][1], dp_max[0][2]});
        dp_max[1][2= map[i][2+ max(dp_max[0][1], dp_max[0][2]);
        
        dp_max[0][0= dp_max[1][0];
        dp_max[0][1= dp_max[1][1];
        dp_max[0][2= dp_max[1][2];
        
        dp_min[1][0= map[i][0+ min(dp_min[0][0], dp_min[0][1]);
        dp_min[1][1= map[i][1+ min({dp_min[0][0], dp_min[0][1], dp_min[0][2]});
        dp_min[1][2= map[i][2+ min(dp_min[0][1], dp_min[0][2]);
        
        dp_min[0][0= dp_min[1][0];
        dp_min[0][1= dp_min[1][1];
        dp_min[0][2= dp_min[1][2];
    }
 
    cout << max({dp_max[0][0], dp_max[0][1], dp_max[0][2]}) << " " << min({dp_min[0][0], dp_min[0][1], dp_min[0][2]});
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
using namespace std;
 
int row, col;
int map[1010][1010];
int Max;
 
int main(void)
{
//    freopen("B1915_input.txt", "r", stdin);
    
    cin >> row >> col;
    
    for(int i = 1; i <= row; i++)
    {
        for(int j = 1; j <= col; j++)
        {
            scanf("%1d"&map[i][j]);    
        }
    }
    
    if(row == 1 || col == 1)
    {
        for(int i = 1; i <= row; i++)
        {
            for(int j = 1; j <= col; j++)
            {
                if(map[i][j] == 1)
                {
                    Max = 1;
                    break;
                }
            }
        }
    }
    else
    {
        for(int i = 1; i <= row; i++)
        {
            for(int j = 1; j <= col; j++)
            {
                if(map[i][j] != 0)
                {
                    map[i][j] = min({map[i-1][j], map[i][j-1], map[i-1][j-1]}) + 1;
                    Max = max(Max, map[i][j]);
                }
            }
        }    
    }
    
    cout << Max * Max;
    
    return 0;
}
cs
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
 
int N, K;
int dp[1010][1010];
 
int solve(int n, int k)
{
    if(k == 0 || n == k)
    {
        return 1;
    }
    
    if(dp[n][k] != 0)
    {
        return dp[n][k] % 10007;
    }
    
    dp[n][k] = solve(n-1, k-1+ solve(n-1, k);
    
    return dp[n][k] % 10007;
}
 
int main(void)
{
//    freopen("B11051_input.txt", "r", stdin);
 
    cin >> N >> K;
    
    cout << solve(N, K);
    
    return 0;
}
cs

+ Recent posts