본문 바로가기

분류 전체보기

(268)
[백준] 13460 - 구슬 탈출2 Re (java) [백준] 13460 - 구슬 탈출2 (java) 13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열 dwc04112.tistory.com static boolean[][][][] visited; 파란구슬 위치에 따른 빨간구슬 위치를 방문처리하여 방문한 좌표는 이동하지 않게 하였다. private static void play() { while(!queue.isEmpty()){ Node temp = queue.remove(); if(temp.count==10) break; visited[temp.redR][temp.redC][temp.bl..
[백준] 13460 - 구슬 탈출2 (java) 13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' www.acmicpc.net DP문제집을 풀다가 재미있어 보이는 문제가 있어서 풀기시작했다. 풀면 풀수록 생각할 것이 더 생기는 문제였다. 결국 풀기는 했지만 실행시간이 엄청 오래걸렸다... (이전에 이동한 위치를 또 갈수있게 만들어서 실행 횟수가 엄청 늘어났다) 그래서 이전에 이동한 위치를 visited에 저장해서 다시한번 풀어봐야겠다. 내가 푼 방법 1. 빨강구슬과 파랑구슬은 겹치면 안된다. ( 둘 다 (2,2) 지점으로 간다면 먼저 도착..
[백준] 2294 - 동전 2 (java) 2294번: 동전 2 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주 www.acmicpc.net 문제 주어진 종류의 동전으로 목표금액 k 를 만드는 것이다. 이때 동전의 최소 수를 구한다. ( 위 예제에서는 5원짜리 동전 3개를 사용하여 15를 만들어서 답이 3 ) 첫째 줄 첫번째 숫자 n 은 동전의 종류 k는 목표값이다. 아래에는 n개의 수는 각각의 동전 가치를 나타낸다. (같은 동전이 올 수 있음) 문제 풀이 n개의 코인을 입력받을때 해당 코인의 금액을 dp의 index로 하고 값을 1로했다. dp[입력받은 코인의 값] =..
[백준] 11052 - 카드 구매하기 (java) 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net 문제 내용 첫번째 줄에 사야하는 카드의 수 N이 주어진다. 두번째 줄에는 각각 1 ~ N개가 들어있는 카드팩의 금액이 적혀있다. N개의 카드를 가장 비싸게 살 때 해당 금액을 구하는 문제 문제 풀이 DP[ i ]에는 i개의 카드를 가장 비싸게 사는 금액이 저장된다. DP[ 1 ] 에는 본인이 최대값이니 board[ 1 ] 이 저장되고 다음 값부터는 각 DP의 최대값을 찾는다 10 1 1 2 3 5 8 13 21 34 55 DP[2]의 값을 찾으려면 board[2]와 dp..
[백준 java] 1912 - 연속합 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 구해야 하는 것은 연속되는 수의 합중 최대값을 구해야한다. 예제 2와 같이 음수가 들어가도 최대값이 나오는 경우는 있다. 만약 음수를 더해도 연속 수 합의 결과값이 양수라면 ( 3 +4 - 4 +6 +5) 최대값이 된다 dp에는 i 이전 까지의 합과 더해야 할 값( arr[i] ) 중 더 큰값이 저장된다 10 2 1 -4 3 4 -4 6 5 -5 1 다음 예제를 보면 dp[3] = -1 dp[4] = Math.max ( dp[3]+ 3 , 3 ) -> -1 + 3 과 3중..
[백준 java] 11054 - 가장 긴 바이토닉 부분 수열 11054번: 가장 긴 바이토닉 부분 수열 첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000) www.acmicpc.net 내가 푼 방법 가장 긴 증가하는 부분수열과 감소하는 부분수열을 합친 문제이다. 나는 기준점 (idx) 을 잡아 그 기준점보다 낮은 인덱스는 LIS 알고리즘을 그리고 높은 인덱스는 LIS를 뒤집어 사용하여 감소하는 부분 수열을 구현하였다. 10 1 5 2 1 4 3 4 5 2 1 만약 위 예제에서 idx = 3을 조사한다 하면 arr[3]을 기준으로 { 1, 5, 2 } 를 오름차순 긴 부분수열을 구하고, { 2, 1, 4, 3, 5, 2, 1 } 을 내림차순 긴 부분수열을 구한다 이..
[백준 java] 11722 - 가장 긴 감소하는 부분 수열 11722번: 가장 긴 감소하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} www.acmicpc.net [백준 java] 11053 - 가장 긴 증가하는 부분 수열 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부 dwc04112.tistory.com 위 문제와 매우 유사한 문제이다. 이번에도 dp에 해당 숫자로 ..
[백준 java] 11053 - 가장 긴 증가하는 부분 수열 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 최장 증가 부분 수열(Longest Increasing Subsequence) 알고리즘으로 풀 수 있는 문제이다. 어떤 수열이 주어지면 그 수열 내에서 (변형x) 오름차순으로 구성된 가장 긴 수열을 LIS 라고 한다. 이 알고리즘을 사용하기 전에는최소값 index를 구하여 해당 index부터 최장거리를 구하려고 했는데중복되는 최소값이 있으면 길이를 구하지 못해서 바로 틀렸다... [BO..