Algorithm 66

[BOJ] #1927 최소 힙

https://www.acmicpc.net/problem/1927 1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 우선순위 큐를 활용하여 구현하면 되는 문제이다. 우선순위 큐에 대한 자세한 설명은 필자가 이전에 정리해둔 내용이 있으니 참고하도록 하자. https://jhoon-study.tistory.com/75 [C++] STL priority_queue 사용법 priority queue C++ STL 컨테이너 중 하나로, 내부적으로 힙 자료구조로 구현된 우선순위 큐를 보다 편하게 사용할..

Algorithm/BOJ 2024.03.02

[BOJ] #11659 구간 합 구하기 4

https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net 문제 자체는 간단한 문제이지만, 문제를 보자마자 딱 떠오른 그 방법으로 풀면 무조건 시간초과에 걸리는 문제이다. 보자마자 딱 떠오른 방법이란, 일단 주어지는 배열을 입력받고, 이후에 입력되는 인자들로 하여금 배열에 접근하여 부분 합을 생으로 구하는 방법일텐데,,, 문제 자체의 시간 제한이 1초인데 비해 해당 매커니즘의 wosrt-case가 100억이다... M번 반복되는 반..

Algorithm/BOJ 2024.03.02

[알고리즘 공부] 그리디 알고리즘 Greedy Algorithm

그리디 알고리즘이란? 그리디 알고리즘(욕심쟁이 알고리즘, Greedy Algorithm)이란 "매 선택에서 지금 이 순간 당장 최적인 답을 선택하여 적합한 결과를 도출하자." 라는 모토를 가지는 알고리즘 설계 기법이다. 정치적으로 보면 당면한 경제 문제를 가장 빠르게 해결해 줄 것이라고 여기는 대통령을 찍거나 당면한 지역 인프라 과제를 가장 빠르게 해결해 줄 것이라고 여기는 시장·군수·도지사 또는 국회의원을 찍는 의사결정 행위로 볼 수 있다. 또한 유명한 마시멜로 실험에 비유할 수 있다. 그리디 알고리즘을 사용한다는 것은 지금 당장 눈 앞에 있는 마시멜로를 계속해서 먹는것이다. 하지만, 이 그리디 알고리즘을 사용하여 도출된 결과값은 항상 가장 최적의 결과를 보장해주지는 않는다. 위의 예시와 같이 지금 당..

[BOJ] #13023 ABCDE

https://www.acmicpc.net/problem/13023 13023번: ABCDE 문제의 조건에 맞는 A, B, C, D, E가 존재하면 1을 없으면 0을 출력한다. www.acmicpc.net 인접리스트 형태로 주어진 그래프에서 Depth가 4 이상인 정점이 존재하는지 판별하는 문제이다. 이를 해결하려면 DFS 탐색에 이어 백트래킹 기법을 활용하여 해결해야한다. 백트래킹 Back Tracking 이란? 해를 찾는 도중에 막히면 더 이상 깊이 들어가지 않고, 이전 단계로 되돌아가서 해를 찾아나가는 기법을 말한다. 따라서, DFS 방식으로 정점들을 순차적으로 탐색하며 non-promising한 정점들은 제외시키고 백트래킹 기법을 사용하여 제외하기 이전의 시퀀스로 다시 돌아가서 promising한..

Algorithm/BOJ 2024.02.26

[BOJ] #1068 트리

https://www.acmicpc.net/problem/1068 1068번: 트리 첫째 줄에 트리의 노드의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 0번 노드부터 N-1번 노드까지, 각 노드의 부모가 주어진다. 만약 부모가 없다면 (루트) -1이 주어진다 www.acmicpc.net DFS 활용해 얼마나 그래프를 능숙하게 탐색할 수 있는지 물어보는 문제인 것 같다. 문제 자체는 굉장히 간단하다. 입력을 통해 인접리스트 형태로 그래프를 주고, 삭제할 노드를 하나 제시해준다. 그러면 해당 노드를 삭제한 후, 남은 리프노드(더 이상 밑에 자식이 없는 자식노드) 의 개수를 세주면 된다. 코드의 매커니즘은 크게 3단계로 구성된다. 1. 주어진 입력에 따라 인접리스트 형태로 그래프..

Algorithm/BOJ 2024.02.26

[BOJ] #21736 헌내기는 친구가 필요해

https://www.acmicpc.net/problem/21736 21736번: 헌내기는 친구가 필요해 2020년에 입학한 헌내기 도연이가 있다. 도연이는 비대면 수업 때문에 학교에 가지 못해 학교에 아는 친구가 없었다. 드디어 대면 수업을 하게 된 도연이는 어서 캠퍼스 내의 사람들과 친해지고 www.acmicpc.net 감정이입이 되는 문제다. 행렬 형식으로 주어지는 그래프에 대해 도연이의 위치를 시작점으로 BFS로 탐색하여 행렬 전체에서 P의 갯수를 찾으면 되는 문제이다. 이때 주의할 점은, O라고 해서 탐색을 하지않고 넘어가는것이 아니라, X를 제외한 모두를 탐색을 하긴 하지만 P일 경우에만 cnt를 올려주어야 한다. int BFS(int x, int y) { queue Q; Q.push(make..

Algorithm/BOJ 2024.02.25

[BOJ] #1520 내리막길

https://www.acmicpc.net/problem/1520 1520번: 내리막 길 첫째 줄에는 지도의 세로의 크기 M과 가로의 크기 N이 빈칸을 사이에 두고 주어진다. 이어 다음 M개 줄에 걸쳐 한 줄에 N개씩 위에서부터 차례로 각 지점의 높이가 빈 칸을 사이에 두고 주어진다. www.acmicpc.net 골드3 정도 난이도의 DFS + DP를 활용한 문제이다. 처음에는 BFS로 접근을 했다가 여러 경로를 모두 탐색해야 하기에 visited 배열을 사용할 수 없음을 깨닫고 DFS로 방향을 틀었다가 시간초과가 나서 DFS에 DP를 접목시킨 방법으로 풀었다... 상당히 험난한 과정을 거쳤다. 애초에 행렬의 최대 사이즈가 500x500인 250,000이고, 방향 4개를 전부 탐색해야 하는데다가 그것도 ..

Algorithm/BOJ 2024.02.25

[BOJ] #1707 이분 그래프

https://www.acmicpc.net/problem/1707 1707번: 이분 그래프 입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에 www.acmicpc.net 인접 리스트로 주어진 그래프를 보고 이분 그래프인지 아닌지 판별하면 된다. 이분 그래프에 대한 자세한 내용은 필자가 따로 정리해두었으니 해당 게시물 참조하면 된다. ⤵️ https://jhoon-study.tistory.com/89 [자료구조] 이분 그래프 Bipartite Graph 이분 그래프란? 인접한 정점끼리 서로 다른 두가지 집합으로만 나눈 그래프를 의미한다. 위 그림과 같이 모든 정점이..

Algorithm/BOJ 2024.02.25

[BOJ] #11725 트리의 부모 찾기

https://www.acmicpc.net/problem/11725 11725번: 트리의 부모 찾기 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오. www.acmicpc.net 간단한 문제인거 같은데, 생각보다 많이 헤맸다... 일단 가중치 없는 그래프 탐색이니 BFS 문제로 갈피를 잡고 들어갔으나, 각 인덱스 마다 계속 BFS를 하는것으로 방향을 잡고 풀다가 계속 틀렸다. 이유인 즉, 자식노드가 복수일 경우에는 해당 방법으로는 절대 부모노드를 구할 수 없기 때문이다. 따라서, 그냥 루트 노드 1에서부터 BFS를 한번만 돌리는 방향으로 바꾸어 풀었다. 처음에 왜 이 생각을 못했을까 싶다. 생각해보면 정말 당연한건데 말이다. 부모노드를..

Algorithm/BOJ 2024.02.22

[BOJ] #12851 숨바꼭질 2

https://www.acmicpc.net/problem/12851 12851번: 숨바꼭질 2 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 www.acmicpc.net #1697 숨바꼭질의 연장선상에 있는 문제이다. 숨바꼭질 3는 아예 다익스트라로 노선을 변경해서 풀면 그나마 풀어냈었는데, 2는 오히려 같은 BFS 코드를 공유하는 문제인지라, 방법을 생각해내는것에 더 어려움을 겪었다. 일단 문제 자체는 가중치가 없는 그래프를 탐색하여 최단거리를 도출해야 하기 때문에 BFS를 이용해 풀었고, 기존 #1697에서 썼던 코드를 일..

Algorithm/BOJ 2024.02.21
728x90