728x90

알고리즘&자료구조/문제 54

[BOJ] 2309 일곱 난쟁이 C++

개요 https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 브롱즈급 브루트포스 문제다. 본문 풀이 생각보다 오래 걸렸다,,!! 난쟁이 9명 중 7명을 추려내려고 하니 여간 복잡한 게 아니었는데,, 반대로 생각해 보니 2명만 빼면 되는 것이었다. 브루트포스로 정답을 골라낸 후 1000으로 바꿔주었다.(모든 입력 값은 100 이하) 주의할 점은 값을 오름차순으로 정렬 후 출력해야 한다는 점! 코드 #include #include using namespace st..

[BOJ] 1260 DFS와 BFS C++

개요 https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 실버 2급 DFS와 BFS 기초 문제다. 본문 풀이 인접 리스트 기반(vector)으로 구현했다. 각각 DFS는 stack, BFS는 queue를 사용했다. 정점의 번호가 작은 순으로 탐색하라는 조건이 있기 때문에 리스트(vector)를 정렬해주어야 한다. DFS는 스택으로 후입선출이기 때문에 내림차순으로, BFS는 큐로 선입선출이기 때문에 오름차순으로 ..

[BOJ] 2606 바이러스 C++

개요 https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 실버 3급 그래프 탐색 문제다. 본문 풀이 그래프 탐색 문제 중 저 난이도 문제인듯하다. 제한이 크게 없어 BFS, DFS 중 어느 것을 사용해도 문제가 없을 것이라 판단했다. queue를 활용한 인접 리스트(vector) 기반 BFS로 풀었다. 1번 컴퓨터는 제외이기 때문에 이 점에 유의해야 한다. 코드 #include #include #include #include using namespace..

[BOJ] 2579 계단오르기 C++

개요 https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 실버급 DP 문제다. 본문 풀이 2차원 배열인 dp에 점수를 저장했다. dp[계단번호][연속이동횟수] 중복되는 부분은 함수로 처리했다. 코드 #include #include #include using namespace std; constexpr int RANGE = 302; int GetMaxDP(int* dp) { int max = (dp[1] > dp[2]) ? dp[1] : dp[2]; return..