목록PS/알고리즘 문제풀이 (157)
득이공간
2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net #include #include #include using namespace std; vector Maze; vector Neighbors; vector Visited; queue SearchQueue; vector Predecessor; void BFS(int InRow, int InCol) { int StartPoint = 0; int FinishPoint = InRow * InCol - 1; Visited[StartPoint] = true; for (const int& Neighbor :..
1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net #include #include #include #include using namespace std; vector Neighbors; vector CheckList; queue SearchQueue; vector DFS; vector BFS; void DFSFunc(int Node) { CheckList[Node] = true; DFS.emplace_back(Node); for (const int& Neighbor : Nei..
2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net #include #include #include using namespace std; int Complex = 0; vector Map; vector Neighbors; vector Households; int NumberingComplex(int HouseIndex) { int Count = 1; Map[HouseIndex] = Complex; for (int& Neighbor : Neighbors[HouseIndex]) { if (Map[Neighbor] ==..
2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하인 양의 정수이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍 www.acmicpc.net #include #include using namespace std; vector PCList; vector CheckList; int SpreadVirus(int SourcePC) { int Infected = 1; CheckList[SourcePC] = true; for (const int& DestinationPC : PCList[SourcePC]) { if (!CheckList[DestinationPC]) { Infected += SpreadVirus(Dest..
1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net #include #include #include using namespace std; struct Meet { int Start; int End; Meet(int StartTime, int EndTime) : Start(StartTime), End(EndTime) {} bool operator> n; Meets.reserve(n); for (int i = 0; i > Start >> End; Meets.emplace_back(Meet(Start, End)); } sort(Meets.begin(), Meet..
1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net #include #include using namespace std; static int minOp[1000001]; int main() { int n; cin >> n; minOp[2] = minOp[3] = 1; for (int i = 4; i
1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net #include #include #include #include using namespace std; int main() { bool possible = true; int n = 0; cin >> n; vector sequence; sequence.reserve(n); for (int i = 0; i > input..