#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
 
typedef struct node
{
    int D;
    int R;
    int G;
}node;
 
int N, L;
node inform[110];
int dist;
int time;
 
int main(void)
{
//    freopen("B2980_input.txt", "r", stdin);
    
    cin >> N >> L;
    
    for(int i = 1; i <= N; i++)
    {
        int D, R, G;
        cin >> D >> R >> G;
        
        inform[i].D = D;
        inform[i].R = R;
        inform[i].G = G;
    }
    
    int idx = 1;
    while(dist != L)
    {
        if(dist == inform[idx].D)
        {
            // 빨간불 + 초록불의 신호등 주기를 통한 나머지 계산을 통해 결과 도출     
            // 빨간불이면 끝날때까지 계속 기다려야됨 
            while(0 <= time % (inform[idx].R+inform[idx].G) && time % (inform[idx].R+inform[idx].G) < inform[idx].R)
            {
                time++;
            } 
            
            // 빨간불 끝나마자마자 초록불 -> 갈 수 있음 
//            if(inform[idx].R <= time % (inform[idx].R+inform[idx].G) && time % (inform[idx].R+inform[idx].G) < inform[idx].R+inform[idx].G)
//            {
                dist++;
                time++;        
//            }
            
            // 신호등 인덱스 증가 
            idx++;
        }
        else
        {
            dist++;
            time++;
        }    
    }
    
    cout << time;
    
    return 0;
}
cs
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
 
int main(void)
{
//    freopen("B2161_input.txt", "r", stdin);
    
    queue<int> q;
    int N;
    
    cin >> N;
    
    for(int i = 1; i <= N; i++)
    {
        q.push(i);
    }
    
    while(q.size() != 1)
    {
        // 우선, 제일 위에 있는 카드를 바닥에 버린다.
        q.pop();
        
        
        // 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다.
        int temp = q.front();
        q.pop();
        q.push(temp);
    }
    
    cout << q.front();
    
    return 0;
}
cs
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
 
int row, col;
int queenNum, knightNum, pawnNum;
char map[1010][1010];
int visited[1010][1010];
int safeZone;
 
vector<pair<intint>> queen;
vector<pair<intint>> knight;
 
int safe(int x, int y)
{
    if(x >= 1 && y >= 1 && x <= row && y <= col)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
 
void knight_move(int x, int y)
{
    int dx[8= {-1-2-2-11221};
    int dy[8= {-2-11221-1-2};
    
    for(int i = 0; i < 8; i++)
    {
        int xpos = x+dx[i];
        int ypos = y+dy[i];
        
        if(safe(xpos, ypos) == 1 && map[xpos][ypos] == '.')
        {
            visited[xpos][ypos] = 1;
        }
    }    
}
 
void queen_move(int x, int y)
{
    int dx[8= {-1-1-111100};
    int dy[8= {-101-101-11};
    
    for(int i = 0; i < 8; i++)
    {
        for(int k = 1; k <= max(row, col); k++)
        {
            int xpos = x + (dx[i] * k);
            int ypos = y + (dy[i] * k);    
            
            if(safe(xpos, ypos) == 1 && map[xpos][ypos] == '.')
            {
                visited[xpos][ypos] = 1;
            }
            else
            {
                break;
            }
        }
    }    
}
    
int main(void)
{
//    freopen("B1986_input.txt", "r", stdin);
    
    cin >> row >> col;
    
    for(int i = 1; i <= row; i++)
    {
        for(int j = 1; j <= col; j++)
        {
            map[i][j] = '.';
        }
    }
    
    cin >> queenNum;
    for(int i = 1; i <= queenNum; i++)
    {
        int x, y;
        cin >> x >> y;
        
        visited[x][y] = 1;
        map[x][y] = 'Q';
        queen.push_back({x, y});
    }
    
    cin >> knightNum;
    for(int i = 1; i <= knightNum; i++)
    {
        int x, y;
        cin >> x >> y;
        
        visited[x][y] = 1;
        map[x][y] = 'K';
        knight.push_back({x, y});
    }
    
    cin >> pawnNum;    
    for(int i = 1; i <= pawnNum; i++)
    {
        int x, y;
        cin >> x >> y;
        
        visited[x][y] = 1;
        map[x][y] = 'P';
    }
    
    for(int i = 0; i < knight.size(); i++)
    {
        knight_move(knight[i].first, knight[i].second);
    }
    
    for(int i = 0; i < queen.size(); i++)
    {
        queen_move(queen[i].first, queen[i].second);
    }
    
    for(int i = 1; i <= row; i++)
    {
        for(int j = 1; j <= col; j++)
        {
            if(visited[i][j] == 0)
            {
                safeZone++;
            }
        }
    }
    
    cout << safeZone;
    
    return 0;
}
cs
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
 
int N;
int kingX, kingY;
int stoneX, stoneY;
 
int safe(int x, int y)
{
    if(x >= 0 && y >= 0 && x < 8 && y < 8)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
 
void execute(string command)
{
    if(command == "B")
    {
        if(safe(kingX-1, kingY) == 1)
        {
            kingX -= 1;    
            
            if(kingX == stoneX && kingY == stoneY)
            {
                if(safe(stoneX-1, stoneY) == 1)
                {
                    stoneX -= 1;    
                }
                else
                {
                    kingX += 1;
                }
            }
        }
    }
    else if(command == "T")
    {
        if(safe(kingX+1, kingY) == 1)
        {
            kingX += 1;    
            
            if(kingX == stoneX && kingY == stoneY)
            {
                if(safe(stoneX+1, stoneY) == 1)
                {
                    stoneX += 1;    
                }
                else
                {
                    kingX -= 1;
                }
            }
        }
    }
    else if(command == "R")
    {
        if(safe(kingX, kingY+1== 1)
        {
            kingY += 1;    
            
            if(kingX == stoneX && kingY == stoneY)
            {
                if(safe(stoneX, stoneY+1== 1)
                {
                    stoneY += 1;    
                }
                else
                {
                    kingY -= 1;
                }
            }
        }
    }
    else if(command == "L")
    {
        if(safe(kingX, kingY-1== 1)
        {
            kingY -= 1;    
            
            if(kingX == stoneX && kingY == stoneY)
            {
                if(safe(stoneX, stoneY-1== 1)
                {
                    stoneY -= 1;    
                }
                else
                {
                    kingY += 1;
                }
            }
        }
    }
    else if(command == "RT")
    {
        if(safe(kingX+1, kingY+1== 1)
        {
            kingX += 1;
            kingY += 1;    
            
            if(kingX == stoneX && kingY == stoneY)
            {
                if(safe(stoneX+1, stoneY+1== 1)
                {
                    stoneX += 1;
                    stoneY += 1;    
                }
                else
                {
                    kingX -= 1;
                    kingY -= 1;
                }
            }
        }
    }
    else if(command == "LT")
    {
        if(safe(kingX+1, kingY-1== 1)
        {
            kingX += 1;
            kingY -= 1;    
            
            if(kingX == stoneX && kingY == stoneY)
            {
                if(safe(stoneX+1, stoneY-1== 1)
                {
                    stoneX += 1;
                    stoneY -= 1;    
                }
                else
                {
                    kingX -= 1;
                    kingY += 1;
                }
            }
        }
    }
    else if(command == "RB")
    {
        if(safe(kingX-1, kingY+1== 1)
        {
            kingX -= 1;
            kingY += 1;    
            
            if(kingX == stoneX && kingY == stoneY)
            {
                if(safe(stoneX-1, stoneY+1== 1)
                {
                    stoneX -= 1;
                    stoneY += 1;    
                }
                else
                {
                    kingX += 1;
                    kingY -= 1;
                }
            }
        }
    }
    else if(command == "LB")
    {
        if(safe(kingX-1, kingY-1== 1)
        {
            kingX -= 1;
            kingY -= 1;
            
            if(kingX == stoneX && kingY == stoneY)
            {
                if(safe(stoneX-1, stoneY-1== 1)
                {
                    stoneX -= 1;
                    stoneY -= 1;    
                }
                else
                {
                    kingX += 1;
                    kingY += 1;
                }
            }
        }
    }
}
 
int main(void)
{
//    freopen("B1063_input.txt", "r", stdin);
    
    string king, stone;
    
    cin >> king >> stone >> N;
    
    kingX = king[1]-'1';
    kingY = king[0]-'A';
    
    stoneX = stone[1]-'1';
    stoneY = stone[0]-'A';
    
    for(int i = 1; i <= N; i++)
    {
        string command;
        cin >> command;
        
        execute(command);    
    }
    
    cout << char(kingY+'A'<< char(kingX+'1'<< endl;
    cout << char(stoneY+'A'<< char(stoneX+'1');
    
    return 0;
}
cs
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
 
string ball = "0123";
int N;
 
void swap(int cup1, int cup2)
{
    int cup1Idx, cup2Idx;
    
    for(int i = 1; i <= 3; i++)
    {
        if(ball[i] == (char)(cup1+'0'))
        {
            cup1Idx = i;
        }
        else if(ball[i] == (char)(cup2+'0'))
        {
            cup2Idx = i;
        }
    }
    
    char temp = ball[cup1Idx];
    ball[cup1Idx] = ball[cup2Idx];
    ball[cup2Idx] = temp;
}
    
int main(void)
{
//    freopen("B1547_input.txt", "r", stdin);
    
    cin >> N; 
    
    for(int i = 1; i <= N; i++)
    {
        int cup1, cup2;
        cin >> cup1 >> cup2;
        
        swap(cup1, cup2);
    }
    
    cout << ball[1];
    
    return 0;
}
cs
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
 
int N;
string command;
char map[110][110];
int dir = 2// 북(0) 동(1) 남(2) 서(3) 
 
void execute(int &x, int &y, char command)
{
    if(command == 'R')
    {
        dir = (dir+1) % 4;
    }
    else if(command == 'L')
    {
        dir = (dir+3) % 4;
    } 
    else if(command == 'F')
    {
        if(dir == 0)
        {
            x -= 1;
        }
        else if(dir == 1)
        {
            y += 1;
        }
        else if(dir == 2)
        {
            x += 1;
        }
        else if(dir == 3)
        {
            y -= 1;
        }
        
        map[x][y] = '.';
    }
}
 
int main(void)
{
//    freopen("B1062_input.txt", "r", stdin);
    
    cin >> N >> command;
    
    for(int i = 0; i < 110; i++)
    {
        for(int j = 0; j < 110; j++)
        {
            map[i][j] = '#';
        }
    }
    
    // 초기값 55, 55를 잡으면 맵의 크기가 110이기때문에 상하좌우 한 방향으로 50칸을 가더라도 범위안에서 해결 가능 
    int x = 55;
    int y = 55
    map[x][y] = '.';
    
    for(int i = 0; i < N; i++)
    {
        execute(x, y, command[i]);
    }
    
    // 미로의 왼쪽위, 오른쪽아래 양끝점 구하기 
    int leftX = 55, leftY = 55, rightX = 55, rightY = 55;
    
    for(int i = 0; i < 110; i++)
    {
        for(int j = 0; j < 110; j++)
        {
            if(map[i][j] == '.')
            {
                if(leftX > i)
                {
                    leftX = i;
                }
                
                if(leftY > j)
                {
                    leftY = j;
                }
                
                if(rightX < i)
                {
                    rightX = i;
                }
                
                if(rightY < j)
                {
                    rightY = j;
                }
            }
        }
    }
    
    for(int i = leftX; i <= rightX; i++)
    {
        for(int j = leftY; j <= rightY; j++)
        {
            cout << map[i][j];
        }
        cout << endl;
    }
    
    return 0;
}
cs
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string>
#include <map>
using namespace std;
 
int N, K;
string word[55];
int alphabet[26];
int Max;
 
int count()
{
    int wordCnt = 0;
    
    for(int i = 1; i <= N; i++)
    {
        bool flag = true;
        
        for(int j = 0; j < word[i].size(); j++)
        {
            if(alphabet[word[i][j]-'a'== 0)
            {
                flag = false;
                break;
            }
        }
        
        if(flag == true)
        {
            wordCnt++;        
        }
    }
    
    return wordCnt;
}
 
void combination(int idx, int cnt)
{
    if(cnt == K-5)
    {
        Max = max(Max, count());
        
        return;
    }
    
    for(int i = idx; i < 26; i++)
    {
        if(alphabet[i] == 1)
        {
            continue;
        }
        
        alphabet[i] = 1;
        combination(i+1, cnt+1);
        alphabet[i] = 0;
    }
}
 
int main(void)
{
//    freopen("B1062_input.txt", "r", stdin);
    
    cin >> N >> K;
    
    if(K <= 4)
    {
        for(int i = 1; i <= N; i++)
        {
            cin >> word[i];
        }
        
        cout << "0";
    }
    else
    {
        alphabet['a'-'a'= 1;
        alphabet['c'-'a'= 1;
        alphabet['i'-'a'= 1;
        alphabet['n'-'a'= 1;
        alphabet['t'-'a'= 1;
        
        for(int i = 1; i <= N; i++)
        {
            cin >> word[i];
        }    
        
        combination(00);
        
        cout << Max;
    }
    
    return 0;
}
cs
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <stdlib.h>
using namespace std;
 
int row, col;
char map[55][55];
int Min = 99999999;
 
int main(void)
{
//    freopen("B1018_input.txt", "r", stdin);
    
    cin >> row >> col;
    
    for(int i = 0; i < row; i++)
    {
        string input;
        cin >> input;
        
        for(int j = 0; j < col; j++)
        {
            map[i][j] = input[j];
        }
    }
    
    for(int i = 0; i+7 < row; i++)
    {
        for(int j = 0; j+7 < col; j++)
        {
            for(int cnt = 0; cnt < 2; cnt++)
            {
                // 칠해야하는 정사각형의 갯수 
                int paint = 0;
                
                // 왼쪽 위가 B 
                if(cnt == 0)
                {
                    // 행, 열의 첫번째 색깔 저장 
                    char row_paint = 'B';
                    char col_paint = 'B';
                    
                    for(int k = i; k < i+8; k++)
                    {
                        for(int m = j; m < j+8; m++)
                        {
                            if(map[k][m] != col_paint)
                            {
                                paint++;
                            }
                            
                            // 열이 바뀔떄마다 색깔 변경 
                            if(col_paint == 'B')
                            {
                                col_paint = 'W'
                            }
                            else
                            {
                                col_paint = 'B';
                            }
                        }
                        
                        // 행이 바뀔때마다 색깔 변경 
                        if(row_paint == 'B')
                        {
                            row_paint = 'W';
                            col_paint = 'W';
                        }
                        else
                        {
                            row_paint = 'B';
                            col_paint = 'B';
                        }
                    }    
                }    
                // 왼쪽 위가 W
                else
                {
                    // 행, 열의 첫번째 색깔 저장 
                    char row_paint = 'W';
                    char col_paint = 'W';
                    
                    for(int k = i; k < i+8; k++)
                    {
                        for(int m = j; m < j+8; m++)
                        {
                            if(map[k][m] != col_paint)
                            {
                                paint++;
                            }
                            
                            if(col_paint == 'B')
                            {
                                col_paint = 'W';
                            }
                            else
                            {
                                col_paint = 'B';
                            }
                        }
                        
                        if(row_paint == 'B')
                        {
                            row_paint = 'W';
                            col_paint = 'W';
                        }
                        else
                        {
                            row_paint = 'B';
                            col_paint = 'B';
                        }
                    }    
                }
                
                Min = min(Min, paint);
            }
        }
    }
    
    cout << Min;
    
    return 0;
}
cs

+ Recent posts