본문 바로가기

코딩테스트/BOJ49

[백준] 11052번 - 카드 구매하기 https://www.acmicpc.net/problem/11052 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 풀이과정 dp[n] : n개의 카드를 구매하는 가격의 최대값 arr[n] : n개의 카드가 들어있는 카드팩의 가격 [예시] dp[1] = arr[1] dp[2] = dp[1] + arr[1] dp[2] = arr[2] dp[3] = dp[2] + arr[1] dp[3] = dp[1] + arr[2] dp[3] = arr[3] ... 이런식으로 가능한 경우의 수가 나오는데, 우리는 최댓값을 구해야하므로 위.. 2023. 2. 24.
[백준] 2206번 - 벽 부수고 이동하기 https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 길찾기라서 BFS라는건 바로 알았는데.... 벽 부수기 처럼 변수가 있는 문제는 저번에도 한 번 못푼 적이 있다 아마 어디 코테 볼 때 나왔던 거 같은데,,,, 암튼 갑자기 그 때 생각이 나서 풀어봤는데 겨우 이해했다,,,, 우선 이 문제에서는 벽을 최대 한번 부술 수 있기 때문에 BFS를 통해 탐색하면서 현재까지 벽을 부순적이 있는지에 대한 여부를 확인해줘야 한다 이를 .. 2022. 11. 21.
[백준] 2225번 - 합분해 https://www.acmicpc.net/problem/2225 2225번: 합분해 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net DP문제... dp[k][n]에 정수 k개로 n을 만드는 경우의 수를 저장해야 한다는 것까지는 생각했는데 역시나 점화식을 찾지 못했다... 뭔가 느는 것 같으면서도 아직도 아리송한 DP...ㅠㅠ [문제 풀이] dp[k][n]에 1~n까지의 정수 k개로 n을 만드는 경우의 수를 저장하면 된다 그럼 dp[k][n]을 만들기 위해 다음과 같은 경우의 수가 나올 수 있다 dp[k][n] = dp[k-1][n] + 0 = dp[k-1[n-1] + 1 = dp[k-1][n-2] + 2 = .... = dp[k-1][0] + n 위에서.. 2022. 11. 3.
[백준] 2156번 - 포도주 시식 https://www.acmicpc.net/problem/2156 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규 www.acmicpc.net 와인을 3잔 연속으로 마실 수 없기 떄문에 현재 인덱스에서 OOX, OXO, XOO의 경우 중 최댓값을 선택해야 한다 예시를 들자면 위와 같이 볼 수 있다 OOX = dp[i-1] OXO = dp[i-2] + arr[i] XOO = dp[i-3] + arr[i-2] + arr[i-1] 위와 같은 점화식으로 계산하면 되고 0, 1, 2번쨰 인덱스는 예외처리 해준다 dp[0] = arr[0]; dp[1.. 2022. 10. 13.
[백준] 9465번 - 스티커 https://www.acmicpc.net/problem/9465 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net DP를 이용해서 풀면 되는 문제다! dp[i][j]는 i행 j열까지의 스티커를 떼어냈을 떄 얻을 수 있는 최대 점수를 저장하면 된다 이 때 인접한 스티커는 떼지 못하기 때문에 위의 그림처럼 대각선으로만 뗴어낼 수 있다 또 3칸이상 비교를 하게 되면 스티커를 뗴지 않은 칸이 발생하기 때문에 저렇게 색칠한 두 가지 중 큰 값을 골라 뗴면 된다 그리고 실제로 구현할 떄는 위의 점화식처럼 1칸.. 2022. 10. 13.
[백준] 10825번 - 국영수 https://www.acmicpc.net/problem/10825 10825번: 국영수 첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1 www.acmicpc.net 정렬 문제였다 Arrays.sort() 메서드와 new Comparator을 사용하고 compare 함수를 오버라이딩해서 사용했다 자바 코드) package boj; import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; public class boj10825 { public static .. 2022. 9. 29.