목록Algorithm/백준 (21)
Inor
- 문제 : https://www.acmicpc.net/problem/11052 남은 붕어빵을 세트로 판매하는 문제입니다. 세트를 어떻게 나누어야지 이윤을 가장 많이 남길 수 있는지 풀어야됩니다. 이전 값이 다음 값에 영향을 줄 수 있기(memoization) 때문에 DP로 풀었습니다. - 풀이 먼저 하나의 경우를 만들고 각각을 분류하며 풀었습니다. 경우를 나열해본 결과 D[N]을 구하기 위해 D[N]부터 D[1]까지 적절하게 더해주며 결과를 도출했습니다. D[N]을 구하기 위해 먼저 N개의 붕어빵 세트를 만들었을때 값을 D[N]에 넣어줬습니다. 그리고 나머지 값들과 비교해줬습니다. D[N] < D[N-j] + D[N-(N-j)]로 비교하면 N보다 작은 값 중에 가장 큰 값과 가장 작은 값을 차례로 비교..
n개의 피연산자와 n-1개의 연산자가 주어지면 연산자와 피연산자를 적절히 배치합니다. 적절히 배치해서 수식을 만드는데 수식을 계산해서 나오는 결과들의 최소값과 최대값을 구하는 문제입니다. 저는 재귀를 이용해서 문제를 해결했습니다. 연산자를 기준으로 최대 10번의 메서드 호출로 문제를 해결할 수 있기 때문에 재귀로해도 stackoverflow 에러가 발생하지 않을 것이라고 생각했습니다. 그러나 중복되는 연산을 제대로 처리해주지 못해서 시간이 오래 걸리는 문제가 있었습니다. 아래는 문제의 링크와 코드입니다. - 문제 : https://www.acmicpc.net/problem/14888 - 소스 코드 import java.util.Scanner; public class OperatorInsertion { i..
한 줄로 이어진 톱니바퀴를 회전 시키는 문제입니다. 하나의 톱니바퀴를 회전 시키도록하는 명령어가 들어왔을때, 양 옆의 톱니바퀴에게 영향을 줄 수 있는지를 확인해서 같이 회전 시키도록하는 것이 문제의 핵심입니다. 4개의 톱니바퀴가 회전해야하는 방향을 담을 수 있는 배열을 선언했습니다. 최초로 회전 명령을 받은 톱니바퀴를 시작으로 배열을 너비 탐색했습니다. 문제의 조건에 따라 너비 탐색으로 탐색된 양 옆의 톱니바퀴의 회전 유무를 판단했습니다. 아래는 문제의 링크와 소스 코드입니다. - 문제 : https://www.acmicpc.net/problem/14891 - 소스 코드 import java.util.LinkedList; import java.util.Queue; import java.util.Scann..
화재가 발생한 빌딩(2차원 배열)에 갇힌 사람을 탈출 시키는 문제 입니다. 불이 옮기는 시점과 사람을 이동시키는 시점을 잘 분류해서 쉽게 해결하였습니다. BFS를 이용해서 사람이 이동 가능한 위치를 찾아서 이동 시키고 화재가 퍼질 수 있는지 확인하여 불이 번지도록 만들었습니다. 사람이 탈출 할 수 있는 최단경로를 찾아야하기 때문에 BFS를 사용 하였습니다. 아래는 문제 링크와 소스 코드 입니다. https://www.acmicpc.net/problem/5427 import java.util.Iterator; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class EscapeFireBuilding ..
안전 영역 문제는 장마철 비가 어느정도 왔을때 안전영역의 갯수가 최대가 되는지 구하는 문제 입니다. 강수량을 확인해서 침수 영역을 만들어주었습니다. 그 후에는 안전구역을 BFS 알고리즘을 사용해서 확인 했습니다. 더 이상 탐색할 곳이 없다면 안전 구역의 번호를 1 증가 시키고 다음 영역을 탐색하였습니다. 처음에는 안전구역이 가장 넓은 경우를 찾는 문제라고 생각했고 비가 가장 조금 왔을 경우에 안전구역이 넓어질 것이라고 생각했습니다. 그러나 안전 구역의 넓이가 아니라 안전 구역이 만들어진 갯수의 최댓값을 구하는 문제인 것을 확인하고 강수량이 될 수 있는 1부터 100까지 모든 경우에서 확인을 하였습니다. 프로그램의 실행 시간을 조금이라도 줄일려면 입력된 구역에서 가장 높은 위치의 값과 강수량을 비교해서 가..
테트로미노 문제는 2차원 배열에 테트리스 게임에서 나오는 막대 모양을 올려 놨을때 해당 위치의 값들을 더해서 최댓값을 찾아내는 문제 입니다. 테트리스에 나오는 막대 모양은 회전, 대칭이 가능하다고 문제에서 설명해주고 있습니다. 해당 문제는 DFS를 이용해서 풀었습니다. 모든 막대기를 만드는 블록들이 총 4개라는 공통점을 찾았고 4번씩 이동했을때 모든 테트리스의 막대기 모양이 만들어진다는 것을 직접 그려가며 발견하였습니다. 4번 이동했을 경우에 1번, 2번, 3번, 4번째에 탐색된 위치의 값들을 더해서 최댓값과 비교하였습니다. 그러나 여기서 한가지 예외 상황이 있었는데 ㅗ모양의 막대기는 DFS를 이용해서 해결할 수 없다는 문제를 발견하였습니다. 이유는 중간에 3갈래 길이 생기는데 재귀함수를 이용해서 모든 ..