목록코딩테스트/백준 (46)
Deff_Dev
문제 https://www.acmicpc.net/problem/1158풀이1~N까지 숫자를 vector에 저장한 뒤, K만큼 뒤에 있는 숫자를 출력/삭제하는 방식으로 문제를 풀이했다.#include#include// https://www.acmicpc.net/problem/1158using namespace std;int main() { int N, K, sel = 0; cin >> N >> K; K--; vector vec; for (int i = 1; i "; return 0;}
문제 https://www.acmicpc.net/problem/6593풀이이 문제는 3차원 공간의 빌딩에서 BFS를 이용하여 시작 지점부터 탈출 지점까지의 최단 거리를 구하는 방식으로 풀이했다. 최단 거리를 저장하기 위해 벽(#)을 -1, 길(.)을 -2로 변환하여 map에 저장했다.시작 지점에서 BFS를 진행했으며, 같은 층에서는 상하좌우로 이동이 가능하고, 층 간에는 위아래로 이동할 수 있어 각 지점에서 총 6방향으로 탐색을 진행했다. 모든 탐색이 끝나고 도착 지점의 값이 -2이라면 Trapped! 출력, -2가 아니라면 Escaped in 도착지점 값 minute(s).을 출력한다. #include#include// https://www.acmicpc.net/problem/6593using nam..
문제 https://www.acmicpc.net/problem/18405풀이이 문제는 BFS를 이용하여 매 초마다 바이러스를 증식하고 S초 뒤에 (Y,X)를 출력하는 방법으로 풀이했다.맵 입력할 때, 바이러스 번호 별 좌표를 저장한다.S번 만큼 바이러스 번호 오름차순으로 BFS를 진행한다.S번 반복한 후, map[Y][X]를 출력한다. vec은 바이러스 번호 별, 해당 초에 증식 가능한 바이러스 좌표가 저장되어 있다.#include#include#include// https://www.acmicpc.net/problem/18405using namespace std;int map[201][1001] = { 0, };int dx[4] = { 1,-1,0,0 };int dy[4] = { 0,0,1,-1 };i..
문제 https://www.acmicpc.net/problem/2563풀이단순 구현 문제로 100 * 100 맵에 색종이를 덮은 부분(1)의 갯수를 구하면 되는 문제이다. 처음 이 문제를 접근했을 때, 겹친 부분의 넓이을 구해 전체 넓이에 뺄려고 했지만, 예외 상황이 너무 많아 위 방법을 사용했다. ex) 색종이가 여러개 겹쳤을 때 #include// https://www.acmicpc.net/problem/2563using namespace std;int main() { int n, x, y, count = 0; int arr[101][101] = {0,}; cin >> n; for (int i = 0; i > x >> y; for (int i = x; i
문제 https://www.acmicpc.net/problem/1138 풀이이 문제는 그리디/구현 문제로, 입력과 동시에 최적의 해를 찾아 순서를 배치한다. 2 1 1 0이 입력됐다면, 2 입력, 0을 두 번 건너 뜀 ▶ 0 0 2 01 입력, 0을 한 번 건너 뜀 ▶ 0 1 2 0 1 입력, 0을 한 번 건너 뜀 ▶ 0 1 2 30 입력, 0을 건너 뛰지 않음 ▶ 4 1 2 3 #include // https://www.acmicpc.net/problem/1138using namespace std;int main() { int n, p; int arr[11] = { 0, }; cin >> n; for (int i = 0; i > p; int count = p; ..
문제https://www.acmicpc.net/problem/1012풀이BFS를 이용하여 그래프를 탐색하고 간선으로 이어져 있는 정점 갯수를 구했다.#include #include #include using namespace std;int m, n, k;int dx[4] = { 1,-1,0,0 };int dy[4] = { 0,0,1,-1 };vector answer;void BFS(int map [50][50], bool visited [50][50], vector > vec) { int count = 0; for (int i = 0; i > q; q.push({ vec[i].first ,vec[i].second }); visited[vec[i].first][vec[i].second] = tru..
문제https://www.acmicpc.net/problem/7576풀이BFS를 통해 익은 토마토(1) 주변 덜 익은 토마토(0)를 탐색하고 익은 토마토(1)로 바꿔준다. BFS가 끝난 후, 전체 맵을 탐색하고 덜 익은 토마토(0)가 있다면 -1 출력하고,덜 익은 토마토(0)가 없다면 맵에서 가장 큰 값을 출력한다. #include #include #include // https://www.acmicpc.net/problem/7576using namespace std;int m, n;int dx[4] = { 1,-1,0,0 };int dy[4] = { 0,0,1,-1 };vector> map;queue > q;void BFS(){ while (!q.empty()) { pair front = q.fron..
https://www.acmicpc.net/problem/2667 이 문제는 1로 이어진 아파트 단지 수와 각 단지내 집의 수를 오름차순으로 출력하는 문제이다. 풀이n의 갯수 만큼 이중 for문을 돌려 아직 방문하지 않은 1을 찾고, 해당 위치에서 bfs를 이용해 이어져있는 1을 탐색한다. 탐색이 완료되면 1의 갯수를 answer 벡터에 Push 한 뒤, 모든 탐색이 완료되면 answer 벡터를 오름차순으로 정렬하고 벡터의 size와 0부터 순서대로 출력한다.#include #include #include #include #include // https://www.acmicpc.net/problem/2667using namespace std;int n;int dx[4] = { 1,-1,0,0 };in..