코딩테스트

BOJ : 11058

joonwoong 2024. 5. 22. 01:36

1. 문제

 

2. 문제 분석 및 알고리즘 설계

 

입력 | (드래그, 복사, 붙여넣기) | 붙여넣기

이렇게 3가지 경우로 나누어서 생각해야하는 문제이다.

그래서 1~6까지는 입력만 하는 경우가 최대이다.

하지만 7부터는 드복붙의 위치를 바꿔가면서 생각해봐야 한다.

이런 유형을 풀때는 그래도 몇 10개 정도의 경우의 수를 적으면서 생각하는 것을 추천합니다!!

ex) A = 7

      j가 3부터 시작인거는 드복붙이 세트라서입니다!!

      () 소괄호 안은 입력&드복 후 붙여넣기 횟수입니다!!

      입입입입드복붙 ▶︎ dp[7-3] * (3-1) = 8

      입입입드복붙붙 ▶︎ dp[7-4] * (4-1) = 9 (최대)

      입입드복붙붙붙 ▶︎ dp[7-5] * (5-1) = 8

      입드복붙붙붙붙 ▶︎ dp[7-6] * (6-1) = 5

for(int i=7;i<=N;i++){
      for(int j=3;j<i;j++){
             dp[i] = Math.max(dp[i], dp[i-j]*(j-1));
      }
}

 

3. 코드

package week7;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Q11058_boj {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        long dp[] = new long[N+1];

        for(int i=1;i<=6;i++){
            dp[i] = i;
        }

        for(int i=7;i<=N;i++){
            for(int j=3;j<i;j++){
                dp[i] = Math.max(dp[i], dp[i-j]*(j-1));
            }
        }

        System.out.println(dp[N]);
    }
}

 

4. 시간복잡도

 

O(n^2)

 

5. 결과

 

6. 틀린 이유

 

dp 초기값 선언할때 처음에 N+1로 했는데 자꾸 ArrayIndexOutOfBounds 오류가 나서 그냥 100까지 라길래 101까지 잡았습니다.

아 1~6까지 값때문이네요.. 창피하군요

 

7. 소감

 

처음에 감이 잘 안잡혀서 손으로 많이 적으면서 풀다보니 문제에 대한 이해가 잘된 것 같습니다. 오류가 왜 났을까요? 창피하군요2

'코딩테스트' 카테고리의 다른 글

BOJ : 2003  (0) 2024.05.26
BOJ : 2851  (0) 2024.05.24
BOJ : 12845  (0) 2024.05.22
BOJ : 2217  (0) 2024.05.22
BOJ : 4796  (0) 2024.05.22