[BOJ][Java] 16236. 아기 상어
·
💭 Problem Solving/Java
문제https://www.acmicpc.net/problem/16236 문제 이해N×N 공간: 빈 칸(0), 물고기(1~6), 상어(9)상어의 크기: 2.상어는 자신의 크기보다 작은 물고기만 먹을 수 있고, 자신의 크기와 같거나 작은 칸은 지나갈 수 있다.가장 가까운 물고기를 먹는다.거리가 같으면 가장 위(행이 작은) 물고기그다음 가장 왼쪽(열이 작은) 물고기물고기를 자신의 크기만큼 먹으면 크기가 1 증가더 이상 먹을 수 없을 때까지 이동한 총 시간(=이동 칸 수 합) 을 구한다. 아이디어최단거리 탐색: BFS거리 → 행 → 열 우선순위: 우선순위 큐 구현상태curSize : 현재 상어 크기(초기 2)cnt : 현재 크기에서 먹은 물고기 수(크기만큼 먹으면 증가)time : 누적 이동 시간방문 배열과 큐..
[BOJ][Java] 16930. 달리기
·
💭 Problem Solving/Java
문제https://www.acmicpc.net/problem/16930 문제 이해N×M 체육관에 빈 칸(.)과 벽(#)이 있다.한 번 이동할 때, 상·하·좌·우 중 한 방향으로 1칸 이상 k칸 이하를 이동할 수 있다.시작점에서 도착점까지 이동하는 최소 시간을 구한다. 문제 풀이BFS를 이용하여 각 칸에 도달하는 최소 시간을 기록한다.상하좌우(dr, dc) 네 방향에 대해 1..k칸 이동하는 경우를 탐색한다. 상태 정의map[r][c] = -1: 미방문, -2: 벽으로 초기화BFS 탐색하면서 해당 칸에 도달한 최소 시간 저장 탐색 조건미방문: map[nr][nc] == -1지금이 처음 도달이므로 map[nr][nc] = map[cur.r][cur.c] + 1로 갱신하고 큐에 넣는다.이미 더 빠른 시간에 도..
[BOJ][C++] 백준 11559번: Puyo Puyo
·
💭 Problem Solving/C++
문제https://www.acmicpc.net/problem/11559 문제 이해뿌요뿌요 게임 중, 현재 주어진 필드에서 몇연쇄가 되는지 구한다. 뿌요뿌요 룰- 뿌요의 색은 R, G, B, Y가 있다.- 같은 색 뿌요가 4개 이상 상하좌우로 연결되어 있으면 그 뿌요들이 모두 없어진다. 이것을 1연쇄라고 한다.- 뿌요는 아래에 바닥이나 다른 뿌요가 나올 때까지 아래로 떨어진다. 뿌요가 없어지면, 똑같이 아래로 떨어진다.- 아래로 떨어지고 나서 다시 뿌요가 터지면 1연쇄가 늘어난다.🚨 터질 수 있는 뿌요가 여러 그룹이 있다면 동시에 터진다. 여러 그룹이 터지더라도 1연쇄가 추가된다. 문제 풀이🔍 접근연결된 같은 색의 뿌요를 찾는다는 관점에서 DFS, BFS 탐색을 떠올릴 수 있다.탐색 후 연결된 뿌요..
[BOJ][C++] 백준 2606번: 바이러스
·
💭 Problem Solving/C++
문제https://www.acmicpc.net/problem/2606 문제 이해컴퓨터가 바이러스에 걸리면, 그 컴퓨터와 네트워크 상에서 서로 연결되어 있는 컴퓨터는 모두 바이러스에 걸린다.1번 컴퓨터를 통해 바이러스에 걸리게 되는 컴퓨터의 수 출력 문제 풀이 🔍 접근 네트워크 상에서 연결되어 있는 컴퓨터들을 그래프로 나타낼 수 있다.1번 컴퓨터와 연결된 모든 컴퓨터를 탐색한다. 💡 DFS & BFS인접 행렬에 네트워크 상에서 서로 연결되어 있는 컴퓨터의 정보를 저장한다.1번 컴퓨터부터 탐색을 시작해서, 1번 컴퓨터와 연결된 모든 컴퓨터에 방문한다.방문할 때마다 방문 표시를 하고 카운트(바이러스에 걸리는 컴퓨터의 수)를 증가시킨다. 코드1️⃣ DFS#include #include using namesp..
[BOJ][C++] 백준 1303번: 전쟁 - 전투
·
💭 Problem Solving/C++
문제https://www.acmicpc.net/problem/1303 문제 이해N × M 전쟁터에서 우리 병사(W)의 위력의 합과 적국의 병사(B)의 위력의 합을 구한다.N명이 뭉쳐있을 때 N²의 위력을 낼 수 있다. 문제 풀이💡 DFS & BFS첫 번째 칸부터 dr, dc 배열을 이용해서 같은 문자('W' / 'B')가 있는 곳을 상하좌우로 탐색한다.이미 방문한 곳은 탐색하지 않는다.탐색하는 곳은 방문 표기하고, 해당 병사 수 카운트를 증가시킨다.탐색을 종료한 후 뭉쳐있는 병사의 위력을 저장한다.병사의 위력을 합한 값을 각각 출력한다. 코드1️⃣ DFS#include #include #include using namespace std;int n, m, cnt;char color;vector> boar..
[BOJ][C++] 백준 1260번: DFS와 BFS
·
💭 Problem Solving/C++
문제https://www.acmicpc.net/problem/1260 문제 이해그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과 출력 문제 풀이주어진 간선과 두 정점의 번호를 이용해 인접 행렬을 저장한다. 💡 DFS현재 정점과 연결된 정점을 순서대로 재귀 탐색한다.시작 V → V와 연결된 정점 A → A와 연결된 정점 B → B와 연결된 정점 C ..인접 행렬 adj[cur][1 ~ n] 순회. 연결되어 있으면 dfs(next)dfs 탐색하면서 방문 표시 & 출력 배열에 삽입하기이미 방문한 곳이면 return💡 BFS현재 정점과 연결된 정점을 모두 큐에 삽입하고 큐에서 정점을 꺼내면서 탐색한다.시작 V → V와 연결된 정점 A → V와 연결된 정점 B → …A와 연결된 정점 A’ → A’와 연결된..
[BOJ][C++] 백준 2667번: 단지번호붙이기
·
💭 Problem Solving/C++
문제https://www.acmicpc.net/problem/2667 문제 이해N × N 크기의 정사각형 지도에서 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다.집이 있는 곳(1)끼리 상하좌우로 연결시켜 단지를 만든다.총 단지수와 단지내 집의 수를 오름차순으로 출력한다. 문제 풀이 🔍 접근 집이 존재하는 곳을 기준으로 그 집의 상하좌우에 또 다른 집이 존재하는지를 판단하는 그래프 탐색 문제로 볼 수 있다.지도를 순회하면서 '1'이 나왔을 때 모든 인접 정점을 방문하여 연결된 집의 개수를 구한다. 🔨 구현 BFS와 DFS를 이용하여 풀 수 있다.방문 표기는 visited 배열을 만드는 대신 지도에서 방문한 곳을 '0'으로 바꾸어 표기할 수 있다.집이 있는 곳에서 dr, dc 배열을 이용해서 상..