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 |
29 | 30 | 31 |
Tags
- 풀이
- 숙명여자대학교 정보보안 동아리
- CSS
- hackctf
- 파이썬
- 웹페이지 만들기
- siss
- The Loard of BOF
- BOJ Python
- Javascript
- c++
- 자료구조 복습
- BOJ
- 생활코딩
- HTML
- hackerrank
- XSS Game
- lob
- SWEA
- 기계학습
- C언어
- 머신러닝
- 드림핵
- 숙명여자대학교 정보보안동아리
- PHP 웹페이지 만들기
- Sookmyung Information Security Study
- Python
- WarGame
- c
- 백준
Archives
- Today
- Total
혜랑's STORY
[HackerRank] Sherlock and Cost 본문
Practice > Algorithm > Dynamic Programming
문제
code
int cost(int B_count, int* B) {
int dp[3][100001] = {0};
int max = 0;
for(int i=1; i<B_count; i++){
dp[0][i] = abs(1 - B[i-1]) + ((dp[1][i-1] > dp[2][i-1]) ? dp[1][i-1] : dp[2][i-1]);
dp[1][i] = abs(B[i] - B[i-1]) + ((dp[1][i-1] > dp[2][i-1]) ? dp[1][i-1] : dp[2][i-1]);
dp[2][i] = abs(B[i] - 1) + dp[0][i-1];
}
for(int i=0; i<3; i++)
if(max < dp[i][B_count-1])
max = dp[i][B_count-1];
return max;
}
- 최대값을 가지도록 할 때 3가지 케이스로 나눌 수 있다.
- B[i-1] - 1 : 뒤 원소를 1로 취급하고 차를 구하기
- B[i-1] - B[i] : 배열의 원소끼리 차를 구하기
- 1 - B[i] : 앞에 원소가 1이기 때문에 최대인 현재 원소와 차를 구하기
- 이때 1과 2의 경우 dp[1][i-1] 또는 dp[2][i-1] 중 더 큰 값을 선택한다.
- 3의 경우 한 가지 경우밖에 없기 때문에 그냥 차를 구해 더한다.
- 마지막으로 dp[0][B_count-1], dp[1][B_count-1], dp[2][B_count-1] 중 제일 큰 값을 찾아 반환하고 함수를 종료한다.
결과
'2021 SISS 21기 활동 > 여름방학 C언어' 카테고리의 다른 글
[HackerRank] Staircase (0) | 2021.08.22 |
---|---|
[HackerRank] Funny String (0) | 2021.08.12 |
[HackerRank] Counting Sort 2 (0) | 2021.08.05 |
[HackerRank] Counting Sort 1 (0) | 2021.08.05 |
[HackerRank] Left Rotation (0) | 2021.07.31 |