백준 15591 MooTube (Silver)

백준 15591←클릭 간선의 갯수가 N-1개 이므로 특정 지점에서 출발하였을 경우 다른 노드를 2번 방문할 일은 없다. 고로 단순 BFS로 구현 가능하다. 아이디어 > BFS를 통해 mid를 계속 갱신한다. mindiststart = min(mindiststart, dist); 여기서 dist는 mid와 end사이의 거리이다. 코드 github

2023년 9월 4일
·
0개의 댓글
·

백준 9376 탈옥

백준 9376←클릭 아이디어 >* 죄수 2명과 상근이의 위치를 기준으로 다익스트라를 적용하여 지도의 각 위치까지의 최소 거리를 모두 구한다. >* 지도의 특정 위치에서 세 최소 거리의 합은 해당 위치까지 상근이와 죄수 2명이 최소 거리로 이동했을 때 드는 비용이다. >* 특정 위치에 문이 있을 경우 2를 빼주는데 이는 단순이 합을 구하게 되면 해당 위치에서 문을 3번 열기 때문이다. >* 가장 비용이 적게 드는 값을 찾는다. 변수 설정 sx1, sy1, sx2, sy2 : 죄수의 위치 VertexInfo : 노드의 좌표와 시작 지점에서 해당 위치까지 가는

2023년 8월 2일
·
1개의 댓글
·

백준 12100 2048(Easy)

백준 12100←클릭 DFS를 이용하는 문제이다. 문제의 제한조건에서 DFS의 길이가 5층으로 제한되어 있기에 시간 복잡도는 크지 않다. DFS를 사용하는 것 보다 문제를 구현하는 것이 조금 귀찮은 문제다. 변수 설정 n: 현재 DFS의 층에 해당한다. d: 움직임의 종류이다. 0부터 3의 값을 가지며 각각 ←,→,↓,↑에 해당하는 연산이다. arr: 전체 2048배열을 저장한다. DFS이기 때문에 전역변수로 설정. move: bool 변수로 이번 연산에서 배열에 움직임이 있었으면 true 아니면 false이다. s: 스택의 개념으로 사용되는 변수로 어차피 하나의 수만 저장할 것이므로 int형으로 선언했다. zero: 배 층마다 움직임 연산을 하는데 해당 층에 0이 있으면 zero가 true가 되고 이후 숫자가 나오면 move가 true가

2023년 3월 26일
·
0개의 댓글
·

SWEA 1855 영준이의 진짜 BFS

SWEA 1855 LCA알고리즘을 사용하여 최소공통 조상을 구하는 알고리즘이다. 처음에 LCA알고리즘을 몰라서 한칸씩 부모를 타고 올라가 시간 초과가 났던 문제이다. LCA란? 아이디어를 간단하게 요약하면 다음과 같다 >* 트리 구조체에서 자신의 2의 거듭제곱번째 조상을 dp배열에 저장한다. > > * 특정한 두 노드의 최소 공통 조상을 찾을 때 dp배열을 활용하여 1칸->2칸->4칸 ...씩 타고 올라간다. 일단 dp배열을 생성하는 코드는 다음과 같다 i 의 $$2^j$$번째 조상은 i의 $$2^j-1$$번째 조상의 $$2^j-1$$번째 조상이다 라고 이해하면 된다. 영준이가 방문할 노드는 BFS를 따라가기 때문에 Queue에 방문 순서를 넣어 이를 구현하였다

2023년 2월 2일
·
0개의 댓글
·

SWEA 1249 보급로 문제

[SWEA 1249] (https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15QRX6APsCFAYD) 최저 비용으로 경로를 탐색하는 문제다. 문제의 조건을 2차원 배열 map으로 받았다. 또한, 특정 위치로 갈 때의 최소의 비용을 저장하는 2차원 배열을 cost로 하였다. 예) costi는 (i,j)로 가는 (지금 껏 계산한) 최소한의 비용이다. > cost는 지금 껏 계산한 비용보다 저렴한 비용으로 방문이 가능하면 해당 값으로 갱신한다. 갱신만 하면 끝이 아니다. 이 갱신으로 영향을 받을 수 있는 주변 좌표들 또한 재 갱신을 해야 하기에 해당 좌표를 다신 방문해야 하므로 다시 queue에 넣어야 한다. 코드 [깃허브](https://github.com/wonchul98/SWEA/blob/main/SWEAgithubu

2023년 2월 1일
·
0개의 댓글
·