본문 바로가기

알고리즘문제풀이

(38)
[백준 16918] 봄버맨 문제 https://www.acmicpc.net/problem/16918 1)문제분류-시뮬레이션 2)문제해결 - 일반 구현 문제- time[][]을 따로 줘서 폭탄을 놓은 시간을 저장하고 1초가 흐를때마다 전체맵을 돌며 1초씩 감소 시킨다.- 맵을 탐색하며, 해당 초에 빈공간에 폭탄을 놓거나, time[][]에 저장해놓은 폭탄 시간을 보고 4방향으로 폭탄을 터뜨린다. #include#include#includeusing namespace std; char map[202][202];int time[202][202];int xrr[4] = { 0,0,1,-1 };int yrr[4] = { 1,-1,0,0 };int R, C, N;int main(){cin >> R >> C>>N;for (int i = 0; ..
[백준 16946]벽 부수고 이동하기 4 문제 https://www.acmicpc.net/problem/16946 1)문제분류-BFS 2)문제해결- 각 정점에서 개수를 세려고하면 시간초과가 나기 때문에 다른 방법을 생각해봐야한닷.- 인접해있는 0끼리 숫자를 세며 묶어준다.- 그러면 묶여있는 0들 기준으로 사방에 벽인 지점을 찾아 값을 더해준다. 이렇게 묶음을 만들고.. 묶음 기준으로 4방향에 1이 있다면 , 0의 개수 더하기 #include#include#includeusing namespace std; char map[1002][1002];int result[1002][1002];int chk[1002][1002];int n, m;int xrr[4] = { 0,0,1,-1 };int yrr[4] = { 1,-1,0,0 };typedef str..
[백준 16933]벽 부수고 이동하기 3 문제: https://www.acmicpc.net/problem/16933 1)문제분류-다익스트라-BFS 2)문제해결 -벽부수고 이동하기 1,2 를 풀고 이 문제 풀기를 추천- chk[x][y][현재까지 부순 벽 개수] =현재까지의 최단 경로비용을 저장(다익스트라)하며 큐를 돌린다.- chk를 3차원으로 하는 이유는, 예를 들어 chk[x][y]로만 해버리면 만약 k가 3이라고 했을때, chk[x][y]에 오는 데이터가 순서대로 [벽을 부신 횟수가 3,경로비용2],[벽을부신횟수가 2,경로비용2]라고 하면 chk[x][y]에 먼저 [벽을 부신 횟수가 3,경로비용2] 을 받아 chk[x][y]=2를 저장한다. 그 다음에 [벽을부신횟수가 2,경로비용2] 의 데이터가 왔을때, 벽을 부신 횟수가 2여서 다음 턴에..
[백준 16957]체스판 위의 공 문제 https://www.acmicpc.net/problem/16957 1)문제분류-우선 순위 큐-구현 2)문제해결- 공은 낮은 방향으로만 흘러가기때문에, 우선순위 큐에 숫자 내림차순으로 담아 큐를 돌린다.- 큐에서 꺼낸 데이터는 8방향 중 작은 위치로 이동 시키고 result[][] 배열에 공의 개수를 쌓는다.- result[공의 최종위치]에 result[현재위치]에 쌓아진 공을 더해준다. #include#includeusing namespace std;int xrr[8] = { -1,-1,-1,0,0,1,1,1};int yrr[8] = {-1,0,1,-1,1,-1,0,1};int map[502][502];int result[502][502];int R, C;priority_queuepq;bool r..
[백준 16955]오목, 이길 수 있을까? 문제 :https://www.acmicpc.net/problem/16955 1)문제분류-구현 2)문제 해결 -구사과가 X이므로 맵에서 X의 위치에서 가로, 세로, 대각선 방향을 모두 탐색한다. -탐색 하는데, X를 놓을 공간인 .가 하나 존재하고, X가 4개 이상이라면 구사과가 승리! #includeusing namespace std;int xrr[8] = { -1,-1,-1,0,0,1,1,1};int yrr[8] = {-1,0,1,-1,1,-1,0,1};char map[502][502];int search(int x, int y){//cout
[백준 16956]늑대와 양 문제:https://www.acmicpc.net/problem/16956 1)문제분류-구현 2)문제 해결- 주의해야할점은 설치해야하는 울타리의 최소의 값이 아니다.!!- 그래서 양과 늑대가 만나지 않게 울타리만 설치하면 된다. - 즉, 양과 늑대가 인접해있다면 울타리를 설치할 수 없기때문에 0을 출력해야하는 것이고- 양과 늑대가 모두 인접해있지 않다면,1을 출력하고 그 사이에 울타리를 모두 설치하면 된다! //5시.#includeusing namespace std;int xrr[4] = { 0,0,1,-1 };int yrr[4] = { 1,-1,0,0 };char map[502][502];int r, c;int search(int x, int y){for (int i = 0; i < 4; i++){int..
[백준 1173]운동 문제 : https://www.acmicpc.net/problem/1173 1)문제 분류-시뮬레이션- 구현 2)문제해결- 일반 구현 문제 //3시25분 #includeusing namespace std;int N, m, M, T, R;int main(){cin >> N >> m >> M >> T >> R;//N운동 m 최소 맥박 M 맥박 한계치 T 맥박증가률 R맥박 감소률 int n = 0; //운동횟수int time = 0;//시간int Cur = m; //현재맥박상태if (m+T>M){cout
[백준 3109]빵집 문제:https://www.acmicpc.net/problem/3109 1)문제분류-DFS-백트레킹-그리디 2)문제해결-각 (0~R,0)에서 dfs를 돌면서, 마지막 열 (0,C-1)만날때 +1을 한다.- dfs에서 빵집을 연결하든 안하든,탐색한 chk[][]를 false로 안바꾸는 이유는- 어차피 그 다음 탐색 시에 그 chk[][] 지점으로 가도 결과는 같기때문에 또 다시 두번 갈 필요가 없다! //12시 50분 ~1시 20분#includeusing namespace std;char map[10002][502];bool chk[10002][502];int R, C;int xrr[3] = { -1,0,1 }; int yrr[3] = { 1,1,1 };int dfs(int x,int y){if (y ==..