본문 바로가기

분류 전체보기

(191)
백준 17070_파이프 옮기기 1(C++) www.acmicpc.net/problem/17070 17070번: 파이프 옮기기 1 유현이가 새 집으로 이사했다. 새 집의 크기는 N×N의 격자판으로 나타낼 수 있고, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 (r, c)로 나타낼 수 있다. 여기서 r은 행의 번호, c는 열의 www.acmicpc.net [문제 풀이] 브루트 포스(Brute force)를 이용하여 문제를 풀었습니다. 이 문제는 파이프를 연속해서 설치해서 목적지까지 도달하는 방법의 개수를 구하는 문제였습니다. 파이프를 설치할 때는 조건이 따릅니다. 이 조건에 맞게 설치를 해주면 문제가 해결됩니다. 이 문제의 경우 파이프가 역으로 올라가는 경우는 생기지 않음으로 방문 여부를 파악하지 않아도 문제가 해결됩니다. 파이프를 설치..
백준 16637_괄호 추가하기(C++) [문제 풀이] 브루트 포스(Brute force)를 이용하여 문제를 풀었습니다. 이 문제는 주어진 수식에 괄호를 쳐서 나올 수 있는 가장 큰 수를 찾는 것입니다. 여기서 괄호를 치는 조건이 존재합니다. 괄호는 하나의 연산자만 포함할 수 있습니다. 즉 ( A + B )와 같이 숫자 두 개 연산자 하나의 경우만 묶을 수 있습니다. 또한 괄호 안에 괄호가 포함돼서는 안됩니다. 이것을 잘 지키면 문제가 쉽게 풀립니다. 단 하나의 조건이 있다면 문제의 답은 음수가 나올 수도 있다는 것을 염두해야 합니다. 코드 설명 들어온 문자열이 1자리이면 그 수를 출력합니다. 아닌 경우 문자열의 0 번째 숫자만 선택하는 경우와 0 ~ 2 까지 괄호로 묶는 경우로 나눠서 함수를 실행합니다. 만약 DFS함수에 들어온 매개변수가 문..
백준 9205_맥주 마시면서 걸어가기(C++) www.acmicpc.net/problem/9205 9205번: 맥주 마시면서 걸어가기 송도에 사는 상근이와 친구들은 송도에서 열리는 펜타포트 락 페스티벌에 가려고 한다. 올해는 맥주를 마시면서 걸어가기로 했다. 출발은 상근이네 집에서 하고, 맥주 한 박스를 들고 출발한다. www.acmicpc.net [문제 풀이] 플로이드-워셜(Floyd Warshall)을 이용하여 문제를 풀었습니다. 이 문제는 상근이가 시작 지점에서 끝 지점까지 50미터당 맥주 한 병을 멈추지 않고 마시면서 갈 수 있는가를 구하는 문제였습니다. 가는 길에 편의점이 있으면 편의점을 들를 수 있고 최대 수용량 맥주 20병을 채울 수 있습니다. 즉 시작 지점 A 노드에서 도착지점 Z로 갈 수 있는 모든 경로를 탐색하며 음수도 처리 가능한..
백준 2573_빙산(C++) www.acmicpc.net/problem/2573 2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net [문제 풀이] BFS를 이용하여 문제를 풀었습니다. 이 문제는 1개의 연결 된 빙산이 주어졌을 때, 2개의 빙산으로 나누어지는데 걸리는 시간을 구하는 문제입니다. 빙산 1칸은 하루에 인접한 물의 개수만큼 녹아 0이 되면 물이 됩니다. 이 문제를 해결하기 위해 BFS를 이용하였습니다. 문제의 로직은 크게 하루 동안 녹는 빙산을 구하는 로직과 둘로 나뉘었는지를 확인하는 로직을 구현하였습니다. 코드 설명 배열을..
백준 2468_안전 영역(C++) www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net [문제 풀이] BFS를 이용하여 문제를 풀었습니다. 이 문제는 물이 0부터 무한대 높이의 비가 내렸을 때, 상, 하, 좌, 우로 서로 연결된 안전 영역의 최대 개수를 구하는 문제입니다. 안전 영역이란 문제 예제에서 높이가 4인 비가 내렸을 때 (0, 0), (0, 1)의 땅은 침수당하지 않습니다. 따라서, 강수량이 4인 경우 좌표 두 개를 묶어 {(0, 0,), (0, 1)} = 안전 영역 하나가 되는 것입니다. 문제..
백준 5014_스타트링크(C++) www.acmicpc.net/problem/5014 5014번: 스타트링크 첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다. www.acmicpc.net [문제 풀이] BFS를 이용하여 문제를 풀었습니다. 이 문제는 강호의 위치 S에서 위로 U 칸 아래로 D 칸 이동을 반복적으로 함으로써 F의 건물의 G 층에 최소 몇 번 만에 도달할 수 있는지를 찾는 문제입니다. BFS를 이용하면 트리의 형태로 옆으로 뻗어 나가면서 이른 시간 안에 횟수를 구할 수 있습니다. 코드 설명 S를 큐에 넣어 줍니다. 큐에 들어 있는 값이 G와 같은지 확인해 줍니다. 큐에 들어 있는 값이 G와 같지..
백준 7569_토마토(C++) www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net [문제 풀이] BFS를 이용하여 문제를 풀었습니다. 이 문제는 토마토가 아래, 위 옆으로 하루에 한 칸 씩 익어가며 며칠 만에 토마토가 모두 익을 수 있는가를 찾는 문제입니다. 조금 특이하게 3차원 배열을 이용하는 BFS 문제였습니다. 구현 방식은 기본적인 BFS 방식과 유사합니다. 다만 좌표의 옆만 보는 것이 아닌 아래위를 함께 봐야 하는 문제입니다. 코드 설명 배열을 입력받으며 토마토..
백준 2644_촌수계산(C++) www.acmicpc.net/problem/2644 2644번: 촌수계산 사람들은 1, 2, 3, …, n (1≤n≤100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어진 www.acmicpc.net [문제 풀이] DFS를 이용하여 문제를 풀었습니다. 이 문제는 주어진 x, y 사이의 관계를 찾는 문제입니다. 이 문제의 경우 DFS와 BFS 모두 사용이 가능합니다. 저는 DFS를 이용하여 문제를 해결했습니다. 코드 설명 2차원 배열 map에 관계를 기록 합니다. map의 x행의 배열에 체크된 i의 자식들을 조사합니다. i가 y 이면 1촌을 반환하고 아닐 경우 i의 자식들을 찾아봅니다. 자식이 ..