본문 바로가기

알고리즘문제풀이

(38)
[백준 1389]케빈 베이컨의 6단계 법칙 문제 https://www.acmicpc.net/problem/1389 1)문제 분류 -BFS-DFS-플로라이드 와샬 알고리즘 2)문제 해결 - Vector에 연결되어 있는 각 정점을 넣어서 연결고리를 만든다. - 각 BOG 유저의 케인베이컨의 수의 합을 알아야하기 때문에, 각 Bog유저마다, BFS를 돌려 케빈베이컨 수가 제일 적은 것을 선택한다. //12시 5분 ~12시 30분 #include#include#include#includeusing namespace std;int N, M;vectorvt[102];typedef struct Data{int x, cnt;}Data;int bfs(int start,int end){bool chk[102][102] = { 0, };queuepq;pq.push(..
[백준 16930]달리기 문제 : https://www.acmicpc.net/problem/16930 1)문제분류-BFS 2)문제 해결 기본 BFS이지만 주의해야할 점은 해당방향으로 최대 k만큼 이동하는데 이동하다가, #또는 범위를 넘어버리면 바로 탈출하고 (점프가 안되기때문)다른방향에서 또 탐색 #include#include#includeusing namespace std; int n, m, k;char map[1002][1002];bool chk[1002][1002];int sx, sy, ex, ey;int xrr[4] = { 0,0,1,-1 };int yrr[4] = { 1,-1,0,0 };typedef struct Data{int x, y, cnt;}Data;bool range(int rx, int ry){if (rxm)..
[백준 16929] Two Dots 문제: https://www.acmicpc.net/problem/16929 1)문제분류-DFS2)문제해결- 기본 DFS 문제 - 각 시작지점을 정해놓고 4방향탐색하며 재귀탄다.- 한 지점에는 한번씩만 가야하니까 방문체크하며 이동을 하는데- 방문체크 되어있고, 재귀 출발한 시작지점이면 사이클을 돈 것 이므로 YES! 출력 - 재귀가 끝날 때까지 못만난다면 No! 출력 #include#include#includeusing namespace std;char map[52][52];int n, m,sx,sy;int chk[52][52];int xrr[4] = { 0,0,1,-1 };int yrr[4] = { 1,-1,0,0 };int ok = 0;bool range(int rx, int ry){if (rxm - ..
[백준 16928]뱀과 사다리 게임 문제 https://www.acmicpc.net/problem/16928 1)문제분류-BFS-다익스트라 2)문제해결Move[index]: index에사다리,또는 뱀의 위치를 표시, 하고 value에 이동할 위치를 넣어준다.chk[]:int형 선언을 통해 주사위 굴린 횟수를 최솟값으로 갱신한다.(bool형으로 하면 애매한 이유가, 주사위 굴릴 경우에만 굴린 횟수 증가, 사다리나 뱀을 만나 이동할땐느 굴린횟수가 증가 되지 않기 때문.->굴린횟수 최솟값을 구해야하기 때문) #include#includeusing namespace std;int Move[102];int map[102];int chk[102];typedef struct P{int x, cnt;}P;int n, m;queuepq;void BFS()..
[백준 2966] 찍기 문제:https://www.acmicpc.net/problem/2966 1)문제분류-부루스포트2)문제해결-간단한 구현 문제-각 사람마다 패턴을 배열에 담은 후, 문제와 패턴을 함께 포문으로 돌면서 카운트를 세면된다. #include#include#includeusing namespace std;char Adrian[3] = { 'A','B','C' };char Bruno[4] = { 'B', 'A', 'B', 'C'};char Goran[6] = { 'C', 'C', 'A', 'A', 'B', 'B' };char input[102];int n;typedef struct Data{int score;string name;}Data;Data person[3];int main(){ person[0].name =..
[백준 14500]테트로미노 문제 https://www.acmicpc.net/problem/14500 1)문제분류-DFS-부루트포스 2)문제해결- 아이디어 문제인 듯하다. 모양을 일일히 만들어서 하드코딩으로 구현하는 방법도 있지만, 재귀로 카운트 4까지만 센다면, 테트리스 모양이 나오게 된다. 단, ㅗ 모양 빼고!!그래서 ㅗ 모양은 하드코딩으로 ㅏ ㅓ ㅜ ㅗ 최댓값을 구한다. #include#includeusing namespace std; int n, m;int map[502][502];bool chk[502][502];int ans = 0;int xrr[4] = { 0,0,1,-1 };int yrr[4] = { 1,-1,0,0 };bool range(int rx, int ry){if (rxm - 1)return false;els..
[백준1987]알파벳 문제:https://www.acmicpc.net/problem/1987 1)문제분류-DFS-백트레킹 2)문제해결-현재까지 이 알파벳을 쓴적이있는지 없는지를 체크하며 재귀를 탄다, 없다면, 재귀타고,말이 갈수 있는 거리인 최댓값을 갱신해 준다..-기본 DFS,백트레킹 인 듯하다 #include#includeusing namespace std; int r, c;char map[22][22];int alpa[30];int xrr[4] = { 0,0,1,-1 };int yrr[4] = { 1,-1,0,0 };int ans = 1;void dfs(int x, int y, int cnt){ for (int i = 0; i < 4; i++){int cx = x + xrr[i];int cy = y + yrr[i];if..
[백준 2573]빙산 문제: https://www.acmicpc.net/problem/2573 1)문제 분류-BFS-DFS2)해결방안- 백준문제중 '치즈'문제와 유사하다. -0(바다)부분만 큐에 집어 넣는다. 1년 후 얼마나 녹을지에 대한 정보를 담은 새 맵을 만든다. 바다를 넣은 큐를 꺼내면서 4방향 (동서남북) 탐색하며 빙산이 있다면, 새 맵에 카운트를 센다. (빙산 기준에서 주위 4방향에 바다가 얼마나 있는지를 카운트하는 것 )- 큐를 다 돌린 후, 현재 맵에서, 아까 만든 새 맵의 카운트를 빼준다.(빙산이 녹은 1년 후의 맵을 다시 그리는 것)- 현재맵에서 빙산이 녹아 바다가 된(0이 된) 부분이 존재한다. -그 부분까지 포함해서 다시 큐를 돌리면된다. #include#include#include#include#inc..