2011:암호코드
https://www.acmicpc.net/problem/2011
풀이
- d[i]
1 | i번째 까지 해석했을 때, 경우의 수 |
- i번째 문자
- 한 자리로 해석되는 경우 : 1 ~ 9
- 두 자리로 해석되는 경우 : 10 ~ 26
https://www.acmicpc.net/problem/2011
1 | i번째 까지 해석했을 때, 경우의 수 |
https://www.acmicpc.net/problem/2133
1 | d[i] = 3 * d[i-2] |
1 | d[i] = 2 * d[i-4] |
https://www.acmicpc.net/problem/1699
d[i] = i의 제곱수의 항의 최소 개수
n과 가장 가까운 제곱수를 찾음
d[n-(n과 가장 가까운수의 제곱수)] + 1
+1을 하는 이유
예를 들어
하지만, 위의 예시에서, d[3]이 가장 작은 값이라는 보장이 없다
즉, 가장 가까운 제곱수를 찾는 것이 틀림
예를 들어 ,
min 값이 답
https://www.acmicpc.net/problem/2579
d[i]
d[i]
example : 10 20 15 25 10 20
근데, 여기서 사소한 문제 !
0~n-1 인덱스로 다음과 같이 하면 틀렸음.
6. 따라서 다음과 같이 d[2]를 구해야함
7. 1~n 인덱스로 범위 잡으면, 상관 없음
https://www.acmicpc.net/problem/1912
d[n]
a[n]을 마지막으로 하는 연속하는 수들의 합 중 가장 큰 수
예를들어,
10 -4 3 1 5 6 -35 12 21 -1
d[4]
여기서 dp 문제라고 파악해야함
왜냐하면,
d[3] 은
따라서
d[4] = max ( a[4] , a[4]+d[3] )
즉,
d[n] = max ( a[n], a[n]+d[n-1] )
https://www.acmicpc.net/problem/11054
가장 긴 증가하는 부분 수열 문제와 가장 긴 감소하는 부분 수열 문제를 더한 문제
가장 긴 증가하는 부분 수열을 구한다
가장 긴 감소하는 부분 수열을 구한다
d1[i] + d2[i] -1 의 최대값을 구한다
여기서 1을 빼는 이유 => 증가하다가 감소할 경우에 1이 두번 더해지기 때문에
https://www.acmicpc.net/problem/11005
몇 번 나누는지 count
count 만큼 배열 생성
생성한 배열에 n%b를 차례대로 저장
n 은 n/b를 새로 저장
n이 0보다 클때까지 3번4번을 반복 실행
값들을 저장한 배열의 값을 index 끝부터 0까지 차례대로 출력
그런데, 해당 index의 값이 10보다 큰경우는
char(값+55) 로 출력
1 | StringBuilder ans = new StringBuilder(); |
https://www.acmicpc.net/problem/1912
수학에서 진법 변확 하는 방식으로 풀면 됨
수는 string 으로 , 진법은 int 로 입력 받음
(string으로 받아 각 자리에 접근하고, 자릿수를 쉽게 파악하기 위해)
각 자리 수에 접근하여 int로 입력받은 수의 자릿수 제곱을 곱하여
더함