티스토리 뷰
programmers.co.kr/learn/courses/30/lessons/12971
코딩테스트 연습 - 스티커 모으기(2)
N개의 스티커가 원형으로 연결되어 있습니다. 다음 그림은 N = 8인 경우의 예시입니다. 원형으로 연결된 스티커에서 몇 장의 스티커를 뜯어내어 뜯어낸 스티커에 적힌 숫자의 합이 최대가 되도록
programmers.co.kr
- 접근법
사실 이 문제는 간단한 원형 다이나믹 문제이다.
처음 인덱스의 정보가 마지막 인덱스의 정보에 영향을 끼친다는 것을 배제하고 문제를 다시보면
"연속하지 않는 숫자들의 최대합" 으로 볼 수 있고 여기에 처음 인덱스의 숫자를 선택했을 때와 선택하지 않았을 때 중 큰 값이 문제의 정답이 된다.
따라서 "연속하지 않는 숫자들의 최대합"은 1차원 배열의 DP로 쉽게 생각해볼 수 있다.
점화식을 간단히 생각해보면 Dy[i]= ( Dy[i-2]+현재숫자 , Dy[i-1] ) 중 큰 값 으로 생각해볼 수 있다.
그리고 다시 배제하였던 원형 다이나믹을 고려해본다면 처음 인덱스의 숫자를 선택했다면 Dy 배열에 정답은 Dy[N-2]에 있을 것이고 처음 인덱스의 숫자를 선택하지 않았다면 정답은 Dy[N-1]에 있을 것이다. (N-1은 인덱스가 0부터 시작하므로)
- 유사문제
17404번: RGB거리 2
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나
www.acmicpc.net
대표적인 원형다이나믹 문제.
단 각 인덱스에서 선택할 수 있는 옵션이 3가지있다는 점이 차이점이다.
programmers.co.kr/learn/courses/30/lessons/42897
코딩테스트 연습 - 도둑질
도둑이 어느 마을을 털 계획을 하고 있습니다. 이 마을의 모든 집들은 아래 그림과 같이 동그랗게 배치되어 있습니다. 각 집들은 서로 인접한 집들과 방범장치가 연결되어 있기 때문에 인접한
programmers.co.kr
이 문제와 100% 같다고 볼 수 있다.
-소스코드
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
|
#include <iostream>
#include <vector>
using namespace std;
#define MAXI(A,B) A>B ? A : B
int Dy[100010];
int N;
int re(int idx) {
if(idx<0) return 100002;
return idx;
}
int Dynamic(int picked,vector<int> sticker) {
Dy[0]=picked;
for(int i=1;i<N;i++) {
Dy[i]=MAXI(Dy[i-1],Dy[re(i-2)]+sticker[i]);
}
if(picked==0) return Dy[N-1];
return Dy[N-2];
}
int solution(vector<int> sticker)
{
int answer = 0;
N=sticker.size();
if(N==1) return sticker[0];
answer=Dynamic(sticker[0],sticker);
answer=MAXI(answer,Dynamic(0,sticker));
return answer;
}
|
cs |
'Problem Solving > 프로그래머스' 카테고리의 다른 글
[C/C++] Lv2 프로그래머스 - [3차] 압축 (0) | 2021.01.08 |
---|---|
[C/C++] Lv3 프로그래머스 - 보행자 천국 (0) | 2021.01.08 |
[C/C++] Lv4 프로그래머스 - 보석 쇼핑 (0) | 2021.01.07 |
[C/C++] Lv4 프로그래머스 - 단어 퍼즐 (0) | 2021.01.07 |
[C/C++] Lv2 프로그래머스 - [3차] 파일명 정렬 (0) | 2021.01.07 |
- Total
- Today
- Yesterday
- C++
- 그리디
- AI 프로젝트
- cnn
- NLP 구현
- 백준
- DeepLearning
- P-Stage
- 알고리즘
- DACON
- 다이나믹프로그래밍
- 코딩테스트
- 이분탐색
- dfs
- 브루트포스
- 공공데이터
- 동적계획법
- Unet
- ResNet
- 백트래킹
- 데이터핸들링
- 부스트캠프 AI Tech
- 데이터연습
- Data Handling
- pandas
- Unet 구현
- python
- 네트워킹데이
- 프로그래머스
- Vision AI 경진대회
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |