티스토리 뷰
문제
19576번: 약수
가능 한 방법 중 하나로, a2를 12로, a3을 3으로 바꾸면 된다.
www.acmicpc.net
문제 풀이
1. 약수관계를 생각해보면 1은 모든 수와 약수관계를 이루므로 와우매직을 사용하는 경우엔 1로 바꿔주면 된다.
2. 와우매직을 최소한으로 사용하기 위해선 기존의 수들이 최대한 많은 약수관계를 이뤄야하고, 이는 수들을 정렬했을 때 각 인덱스를 시작으로 해당 인덱스의 수와 다른 수들과의 약수관계를 이루는 길이를 구하고 그 중 최댓값을 n에서 빼주면 와우매직을 사용하는 최소횟수이다.
코드
#include <bits/stdc++.h>
using namespace std;
int n, dp[5001];
vector<int> a;
int go(int cur) {
int &ret = dp[cur + 1]; // dp[cur + 1] = cur + 1에서 시작했을 때 약수관계를 이루는 최대 길이
if (ret != -1) return ret;
ret = 1;
for (int nxt = cur + 1; nxt < n; nxt++) {
if (cur == -1 || !(a[nxt] % a[cur]))
ret = max(ret, go(nxt) + 1);
}
return ret;
}
int main() {
cin.tie(NULL); cout.tie(NULL);
ios_base::sync_with_stdio(false);
memset(dp, -1, sizeof(dp));
cin >> n;
a.resize(n);
for (int i = 0; i < n; i++) cin >> a[i];
sort(a.begin(), a.end());
cout << n - (go(-1) - 1);
}
'Algorithm > BOJ' 카테고리의 다른 글
[백준 17436] 소수의 배수 (0) | 2020.09.06 |
---|---|
[백준 16402] 제국 (0) | 2020.09.05 |
[백준 19588] 상품권 준비 (0) | 2020.08.31 |
[백준 19591] 독특한 계산기 (0) | 2020.08.31 |
[백준 1662] 압축 (0) | 2020.08.31 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 백준
- 트리
- 이분탐색
- 2022 카카오블라인드
- 프로그래머스 위클리 9주차
- 구현
- 프로그래머스 월간코드챌린지
- 2021 카카오 블라인드
- 파싱
- 카카오 2020 인턴십
- 위클리 챌린지
- BFS
- 카카오 2021
- 게임이론
- 카카오 2차코딩테스트
- 유니온파인드
- 표 편집
- 누적합
- 시뮬레이션
- Kakaoblind
- 투포인터
- 2020 KAKAO BLIND RECRUITMENT
- 동적계획법
- 2022 KAKAO BLIND RECRUITMENT
- 2021 KAKAO BLIND
- 2022 카카오 블라인드 코딩테스트
- 카카오 표 편집
- 카카오 인턴십
- 프로그래머스
- DP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함