목록PS/알고리즘 문제풀이 (157)
득이공간
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/QqhYL/btsFRjdWGk0/rR3d2OlbW8lXYtDclKAJX0/img.png)
2638번: 치즈 첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5 ≤ N, M ≤ 100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로 www.acmicpc.net #include #include #include using namespace std; int N, M; bool Cheeze[100][100]; const int DX[4] = { -1, 0, 1, 0 }; const int DY[4] = { 0, -1, 0, 1 }; queue SQ; bool Visited[100][100]; int Air[100][100]; void BFS() { memset(Visited, false, sizeof(Visite..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/w63jo/btsFK2YV6I8/cs8YFwSsoFJhiBKAgnE8m0/img.png)
17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net #include #include using namespace std; int R, C, T; int Dust[50][50]; int Air2; const int DX[4] = { -1, 0, 1, 0 }; const int DY[4] = { 0, -1, 0, 1 }; void Spread() { queue DQ; for (int i = 0; i 0) { DQ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cdZcsD/btsFK9wt9TK/CISLFaXvKK2hiz4NPTE6k0/img.png)
14938번: 서강그라운드 예은이는 요즘 가장 인기가 있는 게임 서강그라운드를 즐기고 있다. 서강그라운드는 여러 지역중 하나의 지역에 낙하산을 타고 낙하하여, 그 지역에 떨어져 있는 아이템들을 이용해 서바이벌을 www.acmicpc.net #include #include using namespace std; const int Infinite = INT_MAX; int N, M, R; int Item[101]; int Distance[101][101]; void FloydWarshall() { for (int k = 1; k > M >> R; for (int i = 1; i > Item[i]; } for (int i = 1; i S >> E >> W; Distance[S][E] = W; Distance[E..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/OR2Pf/btsFIhhtWWB/7kNhkDRiKxUaVVBQHj9UyK/img.png)
14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net #include #include using namespace std; typedef pair position; int N, M; int Map[8][8]; int MaxVirus; position Virus[10]; const int MaxAdd = 3; position AddWall[MaxAdd]; const int DX[4] = { -1, 0, 1, 0 }; const int DY[4] = { 0, -1, 0, 1 }; queue SQ; bool Visited[8][8];..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ddwoSr/btsFKSALspl/FsatBJy3qUp3MMcInGAqDK/img.png)
13172번: Σ 모듈러가 11에서 1,000,000,007이 되어 답이 달라졌지만, 역시 3을 곱한 다음 1,000,000,007으로 나눈 나머지는 7이 된다. www.acmicpc.net #include #include using namespace std; typedef long long ll; const ll Mod = 1000000007; ll Pow(ll X, ll Y) { if (Y == 1) { return X; } if (Y % 2 == 1) { return X * Pow(X, Y - 1) % Mod; } ll Z = Pow(X, Y / 2); return Z * Z % Mod; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/p4IPl/btsFJ4AB22e/0jltU46Q0qxdodOrBK0Vek/img.png)
12851번: 숨바꼭질 2 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 www.acmicpc.net #include #include using namespace std; int Time[100001]; int Count[100001]; bool Visited[100001]; queue SQ; void NeighborCheck(int Neighbor, int Current) { if (Neighbor 100000) { return; } int CurTime = Time[Neighbor]; int..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bsoq60/btsFF2qYare/R9QFHk5IvKK2HKNCeXfeu1/img.png)
11054번: 가장 긴 바이토닉 부분 수열 첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000) www.acmicpc.net #include using namespace std; int Sequence[1000]; int LengthL[1000]; int LengthR[1000]; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N; cin >> N; for (int i = 0; i > Sequence[i]; for (int j = 0; j < i; ++j) { if (Sequence[j..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bE0zxp/btsFFYIp4cj/ngn0S8LAqIKGW3JuBUCcN1/img.png)
9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net #include #include using namespace std; string Str; string Bomb; string Current; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin >> Str >> Bomb; int Length = Bomb.size(); for (int i = 0; i < Str.size(); ++i) { Current...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/m524a/btsFFQcKMZo/8MVbSffC9k1TKSPtCLuUok/img.png)
9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net #include using namespace std; int N, Cnt; int Col[14]; bool Check(int Index) { for (int i = 0; i < Index; ++i) { if (Col[i] == Col[Index] || abs(Col[Index] - Col[i]) == Index - i) { return false; } } return true; } void DFS(int Index) { if (Index == N) { ++Cnt; return;..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/k7nw9/btsFCvFZAAg/U2L0z81DnooQXSzdR6oe81/img.png)
2448번: 별 찍기 - 11 첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수) www.acmicpc.net #include using namespace std; char Board[3072][6143]; void DrawTriangle(int N, int Row, int Col) { if (N == 3) { for (int i = 0; i < N; ++i) { Board[Row + i][Col - i] = '*'; Board[Row + i][Col + i] = '*'; } for (int i = 0; i < 2; ++i) { Board[Row + N - 1][Col - i] = '*'; Board[Row + N - 1]..