C++(3)
-
[백준/C++] 17142 연구소3 (BFS)
💡 문제 설명 비활성 바이러스의 위치가 2로 표시되는데 연구실 바이러스 M개를 활성시킨다는 것은 2로 표시된 위치 중에서 M 개를 선택해서 바이러스를 뿌리겠다는 것이다. 그리고 전체 빈 공간을 바이러스(비활성,활성 포함)로 모두 채우는데 얼마나 걸리는 지를 계산 하는 문제이다. 전형적인 bfs이지만 조합이 한 번 들어갔다는 점에 있어서 아주 살짝 까다로운 느낌을 내려고 한 문제이다. 💡 문제 풀이 먼저 바이러스 정보들을 struct info에 저장하고 이 struct를 벡터로 구성하여 virus정보를 저장한다. 조합을 통해서 바이러스의 활성 상태를 on/off 해 주면서 조합을 구한다. 조합은 중복되지 않는 숫자들을 고르는 것이기 때문에 for (int i = inx ; i < virus.size() ;..
2023.02.18 -
[ 백준/C++] 17472 다리만들기2 (삼성A형 기출문제,BFS,DFS 이용하기)
파란것은 섬이고 하얀것은 바다 그리고 회색의 다리로 섬들을 최소 길이로 이으라는 문제이다. 문제 자체는 이해하기 어렵지 않다. 다리는 직선이어야 하고 길이는 2이상이어야 한다. 그리고 다리는 섬과 섬 사이를 이어야한다. 즉, 다리를 잇는 도중에 다리를 짓는 방향과 다른방향으로 섬이 있다고 해서 섬이 이어졌다고 판단하면 안된다. 그런데 이 문제를 푸는 방법은 좀 생각을 잘 해야 한다. 코드를 보면 좀 복잡 해 보이겠지만 함수의 이름을 최대한 직관적으로 쉽게 지정해 놓았으니 찬찬히 보면서 이해해 보면 좋을 것 같다. 일단 풀이의 알고리즘 순서는 다음과 같다. 1.dfs()를 이용하여 일단 섬의 개수를 구한다. dfs를 이용하여 동서남북 4방향 다 체크하면서 더 이상 갈 곳이 없으면 빠져나와서 섬 개수를 카운..
2023.02.12 -
[백준/C++] 17143번 낚시왕 (반례 케이스)
문제 자체는 어렵지 않은데 코딩을 할 때 좀 잘 생각해야 하는 문제이다. 시뮬레이션 문제이고 낚시왕이 1번 열의 한 칸 왼쪽에서 오른쪽까지 이동하면 멈추므로 낚시왕의 위치를 기준으로 시뮬레이션을 실행하면 된다. 특히 상어의 위치에 대해서 잘 생각 해야 하는 문제이다. 죽은 상어를 먹고 있지 않은 지 생각해야 한다. 또한, 새로 이동한 상어가 전에 있던 상어의 위치로 옮겨 갈 때(?) 위치 정보가 올바르게 저장되는 지도 잘 따져보자. 나는 개인적으로 어떤 정보를 담고있는 물체(상어)라면 struct를 사용하는 것을 애용한다. 한 번에 모든 정보를 담기 쉽고 접근성이 좋기 때문이다. #define _CRT_SECURE_NO_WARNINGS #define ABS(A,B) A>B? A-B: B-A #includ..
2023.02.11