Per ardua ad astra !
I'm On My Way
Per ardua ad astra !
전체 방문자
오늘
어제
  • 분류 전체보기 (126)
    • Algorithm (50)
      • 백준 (30)
      • SWEA (3)
      • JUNGOL (3)
      • Programmers (5)
      • LeetCode (2)
    • 안드로이드 개발 (6)
      • Java로 개발 (0)
      • Kotlin으로 개발 (3)
    • Spring (41)
      • Spring기본 (17)
      • JPA기본 (15)
      • JPA활용 SpringBoot 기본 (9)
      • API 개발 기본 (0)
    • 네트워크 (3)
    • 운영체제 (0)
    • Life (3)
      • 책 (0)
      • 자기계발 (1)
      • 일상 (2)
    • 노마드코더 (3)
      • python으로 웹 스크래퍼 만들기 (3)
    • 프로그래밍 언어 (17)
      • Java 기본 (2)
      • 코틀린 기본 (15)

블로그 메뉴

  • 홈
  • 방명록

인기 글

hELLO · Designed By 정상우.
Per ardua ad astra !

I'm On My Way

Algorithm/백준

[Java] BaekJoon 11058. 크리보드 (골드5) (DP)

2021. 8. 21. 17:40

문제출처: https://www.acmicpc.net/problem/11058

 

11058번: 크리보드

N = 3인 경우에 A, A, A를 눌러 A 3개를 출력할 수 있다. N = 7인 경우에는 A, A, A, Ctrl-A, Ctrl-C, Ctrl-V, Ctrl-V를 눌러 9개를 출력할 수 있다. N = 11인 경우에는 A, A, A, Ctrl-A, Ctrl-C, Ctrl-V, Ctrl-V, Ctrl-A, Ctrl-C, Ctrl

www.acmicpc.net

 

문제이해

 

목표

크리보드는 kriii가 만든 신기한 키보드이다. 크리보드에는 버튼이 4개만 있으며, 하는 역할은 다음과 같다.
화면에 A를 출력한다.
Ctrl-A: 화면을 전체 선택한다
Ctrl-C: 전체 선택한 내용을 버퍼에 복사한다
Ctrl-V: 버퍼가 비어있지 않은 경우에는 화면에 출력된 문자열의 바로 뒤에 버퍼의 내용을 붙여넣는다.

크리보드의 버튼을 총 N번 눌러서 화면에 출력된 A개수를 최대로하는 프로그램을 작성하시오.

 

풀이

 

버튼 1개눌렀을 때부터 N까지 선형 탐색 (i)

 -> i 이전 인덱스의 값을 기준으로

     전체선택, 복사(2소요) -> 붙여넣기(1씩 소요) 했을 때의 값으로 갱신한다. 

     선택하고, 복사하는데 비용이 2들고, 추가적으로 한번더 붙여넣기를 했다 가정하니까 비용이3. i-1 -> i +2  

     즉, j는 i+2부터 갱신

     

-> 그리고 < longArr[i]의 값 = Max(이전 인덱스의 값 + 1, longArr[i]의 값> 이 된다.

 

소스코드

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

public class 크리보드 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        long[] longArr = new long[N];
        longArr[0] = 1;
        for (int i = 1; i < N; i++) {

            long num = longArr[i - 1];
            long temp = num;
            for (int j = i + 2; j < N; j++) {
                temp += num;
                longArr[j] = Math.max(temp, longArr[j]);
            }

            longArr[i] = Math.max(longArr[i-1] + 1, longArr[i]);
        }
        System.out.println(longArr[N-1]);
    }
}
    'Algorithm/백준' 카테고리의 다른 글
    • [Java] BaekJoon 1949. 우수마을(골드1) (DFS, DP)
    • [Java] BaekJoon 2176. 합리적인 이동경로(골드2) (Dijkstra,DP)
    • [Java] BaekJoon 11559. PuyoPuyo (골드5) (Simulation) (BFS)
    • [Java] BaekJoon 12026. BOJ 거리 (실버1) (DP)
    Per ardua ad astra !
    Per ardua ad astra !
    개발자 지망생이며 열심히 공부하고 기억하기 위한 블로그입니다.

    티스토리툴바