Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- daily challenge
- 리트코드 자바
- 스프링 에러
- leetcode 1721
- 백준 18222
- 구현
- 인텔리제이 에러
- dfs
- 자바 5464
- 프로그래머스 java
- 리트코드 1557
- BFS
- 코테
- 그래프 자바
- 백준
- leetcode
- 카카오
- 파이썬
- 백준 16935
- 코딩테스트
- 프로그래머스
- java leetcode
- DP
- 스택
- 리트코드
- 분할정복
- java 프로그래머스
- Java
- 자바
- 자바 리트코드
Archives
- Today
- Total
레벨업 일지
[Java] 백준 크리보드 본문
문제
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
알아야 할 개념
- 점화식
- dp
풀이
버튼 4가지의 역할은 다음과 같다.
- A를 출력
- 전체 선택
- 선택 영역 복사
- 붙여넣기
알수 있는 규칙은 단순히 A를 추가하면 현재 길이 + 1 가 되고 , 붙여넣기를 하면 현재 단계 i 에서 3번째 전 단계의 것을 가져와서 붙여넣기를 한다.
붙여넣기를 할 때 특징은 다음과 같다.
- 3번쨰 전 것을 가져오면, 1번 붙여넣기를 할수 있다. = dp[ i-3 ] * 2 (3번째 전것의 값 x 2 )
- 4번째 전의 것을 가져오면 2번 붙여넣기 가능 = dp[ i-4 ] * 3 ( 4번째 전것의 값 x 3 )
- k번째 전의 것을 가져오면, k-2번 붙여넣기 가능 = dp[ i-k ] * (k-1) (k번째 전 것의 값 x (k-1) )
이 논리를 이용한 풀이는 다음과 같다.
- 현재 단계 dp[i] 의 값을 dp[i-1]+1 로 초기화한다. (단순히 A 추가)
- 반복문으로 3 이상 i 이하의 값을 k 에 대입하여, dp[i] 의 값을 업데이트 한다.
- dp [N] 을 리턴한다.
- 정답의 크기가 매우 큼으로 long형을 사용
코드
자바
import java.io.*;
import java.util.*;
public class Main {
int N;
public static void main(String[] args) throws IOException {
Main m = new Main();
System.out.println(m.solution());
}
public long solution() throws IOException {
FastReader fr = new FastReader();
int N = fr.nextInt();
long[] dp = new long[101];
for(int i = 1 ;i < N+1 ;i++){
dp[i] = dp[i-1]+1;
for(int j = 3; j < i ; j++){
dp[i] = Math.max(dp[i], (j-1)*dp[i-j]);
}
}
return dp[N];
}
public static class FastReader {
BufferedReader br;
StringTokenizer st;
public FastReader() {
br = new BufferedReader(new InputStreamReader(System.in));
}
public FastReader(String s) throws FileNotFoundException {
br = new BufferedReader(new FileReader(new File(s)));
}
String next() {
while (st == null || !st.hasMoreElements()) {
try {
st = new StringTokenizer(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
long nextLong() {
return Long.parseLong(next());
}
double nextDouble() {
return Double.parseDouble(next());
}
String nextLine() {
String str = "";
try {
str = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[Java] 백준 연구소 3 (0) | 2023.03.22 |
---|---|
[Java] 백준 9019.DSLR (0) | 2023.03.16 |
[Java] 백준 ABCDE (0) | 2023.02.17 |
[Java] 백준 15686 치킨 배달 (0) | 2023.02.14 |
[Java] 백준 2839. 설탕 배달 (0) | 2023.02.03 |
Comments