티스토리 뷰
반응형
풀이
solved.ac 기준 골드 5 난이도의 문제이다. dp 알고리즘을 이용해 문제를 해결할 수 있다.
dp[] 배열을 만들고 i번째 돌상을 색칠할 경우에 얻을 수 있는 최대의 깨달음 양을 dp[i]에 저장해야 한다. 이 때 돌상이 바라보는 방향은 1(왼쪽)과 2(오른쪽) 두 가지 종류가 있으므로 dp배열도 두 개를 생성한다.(왼쪽으로 바라보는 불상으로 깨달음을 얻을 수도, 오른쪽으로 바라보는 불상으로 깨달음을 얻을 수도 있으므로!)
dp 관련 코드는 다음과 같다.
if (dir[i] == 1) {
dp1[i] = (dp1[i-1] + 1 > 1) ? dp1[i-1] + 1 : 1;
dp2[i] = dp2[i-1] - 1;
}
else {
dp1[i] = dp1[i-1] - 1;
dp2[i] = (dp2[i-1] + 1 > 1) ? dp2[i-1] + 1 : 1;
}
이전 불상에 이어서 연속으로 i번째 불상을 색칠할 때 얻을 수 있는 깨달음 양은 dp[i-1] + 1이다.
반대로 i번째 불상을 첫 번째로 색칠했을 때 얻을 수 있는 깨달음 양은 1이다.
둘 중 최대값을 dp[i]에 저장한다.
1번 방향을 바라보고 있을 때에는 dp1[]에, 2번 방향을 바라보고 있을 때에는 dp2[]에 저장해야 한다.
그리고 반대 방향의 dp[] 배열에는 이전 최대값인 dp[i-1]에 1을 빼고 저장한다.
결과 코드
import java.util.*;
import java.lang.*;
import java.io.*;
class Main
{
public static void main (String[] args)
{
Scanner sc = new Scanner(System.in);
int n;
n = sc.nextInt();
int dir[] = new int[n];
int dp1[] = new int[n];
int dp2[] = new int[n];
int dp1Max = 1, dp2Max = 1;
for (int i = 0; i < n; i++) {
dir[i] = sc.nextInt();
}
if (dir[0] == 1) {
dp1[0] = 1;
dp2[0] = 0;
}
else {
dp1[0] = 0;
dp2[0] = 1;
}
for (int i = 1; i < n; i++) {
if (dir[i] == 1) {
dp1[i] = (dp1[i-1] + 1 > 1) ? dp1[i-1] + 1 : 1;
dp2[i] = dp2[i-1] - 1;
if (dp1[i] > dp1Max) dp1Max = dp1[i];
}
else {
dp1[i] = dp1[i-1] - 1;
dp2[i] = (dp2[i-1] + 1 > 1) ? dp2[i-1] + 1 : 1;
if (dp2[i] > dp2Max) dp2Max = dp2[i];
}
}
if (dp1Max > dp2Max) System.out.println(dp1Max);
else System.out.println(dp2Max);
}
}
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 백준27211
- cron시스템
- 백준
- OnActivityForResult
- linuxawk
- 리눅스
- linux파일
- 사용자ID
- cat
- whatis
- Baekjoon27219
- 버추억박스오류
- virtualbox
- GitHubAPIforJava
- 백준27219
- baekjoon
- Baekjoon27211
- 코테
- atq
- SELECT #SELECTFROM #WHERE #ORDERBY #GROUPBY #HAVING #EXISTS #NOTEXISTS #UNION #MINUS #INTERSECTION #SQL #SQLPLUS
- 리눅스cron
- linuxtouch
- Linux
- GithubAPI
- awk프로그램
- 쇼미더코드
- api문서
- linuxgedit
- 버추억박스에러
- E_FAIL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
글 보관함