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 |
Tags
- 레드아보
- N번째큰수
- C++
- LIS #가장긴증가하는부분수열 #
- 22869
- 16202
- 호반우 상인
- 줄어드는수
- 백준
- 코딩
- c++ #입출력 #속도 #ios #sync_with_stdio #cin #cout #tie
- boj #백준
- 20117
- graph #최단경로
- BOJ
- 쌤쌤쌤
- 최소 #공배수 #최대 #공약수 #유클리드 #호제법 #lcm #gcd #c++ #boj #3343 #백준 #장미
- 투포인터 #백준 #boj #20922 #22862
- graph
- 진법변환 #2to10 #10to2 #이진법 #십진법 #변환 #bitset #c++
- 3D #Reconstruction #computer #vision #volume #metric #tsdf #kinect #fusion
- hcpc
- 30870
- 1174
- backtracking #codetree #디버깅 #삼성코테
- 3343
- 사이클 없는 그래프
- c++ #boj #
- 백준 #다익스트라 #dijkstra #9370 #c++
- 이분탐색 #dp #11053
Archives
- Today
- Total
hyunjin
[BOJ 3343 장미] 정수론, LCM 본문
728x90
- $N =10^15$ 크다. 완탐하면 시간 초과 발생.
- 접근의 핵심은 두 수 a,b의 최소공배수 개념
접근법
최소공배수를 찾을 필요는 없지만 최소 공배수 개념을 활용해서 묶음의 가성비를 구한다.
A : 2 개 → 3원 X 10
B : 10개 → 14원 X 2
A : 20개 → 30원
B : 20개 → 28원 win
묶음의 가성비는 B가 더 좋다.
A의 묶음 개수 x, B의 묶음 개수 y라 할때
만약, 총 x*y(최소공배수) 개를 사야한다면 B를 x개 사는 것이 더 이득이다.
B를 x개 사는 게 더 이득이다. ==> A를 y개 이상 살 필요가 없다. (y-1개 이하일 땐 아니란 의미)
그러니 B에 묶음 가성비 좋은 가게로 설정해두고
A를 y개 미만일 때까지 가격을 비교하면 된다.
코드
#include <iostream>
#include <climits>
#include <cmath>
using namespace std;
typedef long long ll;
ll N, ans = LONG_MAX;
ll na, nb, ca, cb; // 묶음개수 ,가격
int main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> N >> na >> ca >> nb >> cb;
//묶음 가성비 B가 더 좋게 설정
if (ca * nb < cb * na) {
ll tmp = na;
na = nb;
nb = tmp;
tmp = ca;
ca = cb;
cb = tmp;
}
//정확하게 따지면 cb가 아니라 최소공배수 만드는 배수겠지만
// nb로 해도 답은 나오니까
// x : a의 묶음 개수
// y: b의 묶음 개수
for (ll x = 0; x < nb; x++) {
ll y = (long long)ceil((double)(N - na * x) / (double)nb);
bool over = false;
if (y < 0) {
y = 0;
over = true;
}
ans = min(ans, ca * x + cb * y);
if (over) break;
}
cout << ans <<"\n";
return 0;
}
참고
https://velog.io/@alswndit/%EB%B0%B1%EC%A4%80-3343%EB%B2%88-%EC%9E%A5%EB%AF%B8-G4
728x90
'알고리즘 연습 > 백준' 카테고리의 다른 글
[BOJ22869 징검다리 건너기(small)] 다이나믹 프로그래밍 dp (0) | 2024.05.18 |
---|---|
[BOJ 5875 오타 c++] 자료구조 누적 합 (0) | 2024.04.28 |
[BOJ 2933 미네랄] 구현 그래프 너비 깊이 우선 (0) | 2024.04.23 |
[BOJ 9370 미확인 도착지] 다익스트라 dijkstra 그래프 최단경로 (0) | 2024.04.22 |
[투포인터 BOJ20922 BOJ22862] (0) | 2024.04.20 |