λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Algorithm πŸ§‘πŸ»‍πŸ’»/λ°±μ€€(BOJ)

[λ°±μ€€,c++] 2792번 - 보석 μƒμž

by μ•ˆμ£Όν˜• 2022. 9. 8.

문제

 

2792번: 보석 μƒμž

보석 곡μž₯μ—μ„œ 보석 μƒμžλ₯Ό μœ μΉ˜μ›μ— κΈ°μ¦ν–ˆλ‹€. 각각의 보석은 M가지 μ„œλ‘œ λ‹€λ₯Έ 색상 쀑 ν•œ 색상이닀. 원μž₯ μ„ μƒλ‹˜μ€ λͺ¨λ“  보석을 Nλͺ…μ˜ ν•™μƒλ“€μ—κ²Œ λ‚˜λˆ„μ–΄ μ£Όλ €κ³  ν•œλ‹€. μ΄λ•Œ, 보석을 받지 λͺ»ν•˜

www.acmicpc.net

 

μ½”λ“œ

#include <iostream>
#include <vector>
#define ll unsigned long long int
using namespace std;

int N, M;
vector<ll> v;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin>>N>>M;
    ll max_find = 0;
    for(int i=0; i<M; i++){
        int inp; cin>>inp;
        v.push_back(inp);
        max_find += inp;
    }
    
    ll start = 1, end = max_find;
    ll ans = 0;
    while(start <= end){
        ll mid = (start + end) / 2;
        ll jeal = mid;  // μ΅œλŒ€ μ§ˆνˆ¬μ‹¬
        ll peo = 0;
        for(int i=0; i<M; i++){
            if(jeal >= v[i]) peo += 1;
            else{
                if(v[i] % jeal == 0) peo += v[i] / jeal;
                else peo += (v[i] / jeal) + 1;
            }
        }
        if(peo > N) start = mid +1;
        else{
            ans = mid;
            end = mid -1;
        }
    }
    cout<<ans;
    
}

 

풀이

 

[λ°±μ€€,c++] 6236번 - 용돈 관리

문제 6236번: 용돈 관리 ν˜„μš°λŠ” μš©λˆμ„ 효율적으둜 ν™œμš©ν•˜κΈ° μœ„ν•΄ κ³„νšμ„ 짜기둜 ν•˜μ˜€λ‹€. ν˜„μš°λŠ” μ•žμœΌλ‘œ N일 λ™μ•ˆ μžμ‹ μ΄ μ‚¬μš©ν•  κΈˆμ•‘μ„ κ³„μ‚°ν•˜μ˜€κ³ , λˆμ„ νŽ‘νŽ‘ 쓰지 μ•ŠκΈ° μœ„ν•΄ μ •ν™•νžˆ M번만 ν†΅μž₯

dkswnkk.tistory.com

μœ„ λ¬Έμ œμ™€ 거의 μœ μ‚¬ν•©λ‹ˆλ‹€.

μ΅œλŒ€ μ§ˆνˆ¬μ‹¬μ„ μœ λ°œν•˜λŠ” 개수λ₯Ό 이뢄 탐색을 ν†΅ν•΄μ„œ μ •ν•œ 후에 ν•΄λ‹Ή μ§ˆνˆ¬μ‹¬μ„ 가지고 λͺ¨λ“  보석을 νƒμƒ‰ν•©λ‹ˆλ‹€.

ν•΄λ‹Ή λ³΄μ„μ˜ κ°―μˆ˜κ°€ μ§ˆνˆ¬μ‹¬μ„ μœ λ°œν•˜λŠ” κ°œμˆ˜λ³΄λ‹€ μž‘λ‹€λ©΄ κ·Έλƒ₯ μ „λΆ€ λ‚˜λˆ μ€λ‹ˆλ‹€. 

λ§Œμ•½ λ³΄μ„μ˜ κ°―μˆ˜κ°€ μ§ˆνˆ¬μ‹¬μ„ μœ λ°œν•˜λŠ” κ°œμˆ˜λ³΄λ‹€ 클 λ•Œ

  • (보석 % μ§ˆνˆ¬μ‹¬) == 0 이라면 μ „λΆ€ μ§ˆνˆ¬μ‹¬ 개수만큼 λ‚˜λˆ μ€„ 수 μžˆμœΌλ‹ˆ λ‚˜λˆ μ£Όκ³ ,
  • (보석 % μ§ˆνˆ¬μ‹¬) != 0이라면 ν•œ λͺ…은 μ§ˆνˆ¬μ‹¬λ³΄λ‹€ 적은 개수λ₯Ό λ°›κ²Œ 될 ν…Œλ‹ˆ μΈμ›μ˜ 수λ₯Ό μΆ”κ°€λ‘œ +1 ν•΄μ€λ‹ˆλ‹€.

μ΅œμ’…μ μœΌλ‘œ 보석을 λ‚˜λˆ μ€€ μΈμ›μ˜ 수 > N일 κ²½μš°μ— μ§ˆνˆ¬μ‹¬μ„ μœ λ°œν•˜λŠ” 수λ₯Ό 더 크게 μ„ΈνŒ…ν•˜μ—¬ νƒμƒ‰ν•˜κ³  λ°˜λŒ€μ˜ κ²½μš°μ—λŠ” 더 μž‘κ²Œ μ„ΈνŒ…ν•˜μ—¬ νƒμƒ‰ν•©λ‹ˆλ‹€.

예제 μž…μΆœλ ₯ 2λ₯Ό 예λ₯Ό λ“€μ–΄ μ‚΄νŽ΄λ³΄λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

7 5
7
1
7
4
4

 

1 4 4 7 7 만큼의 보석 κ°―μˆ˜κ°€ 있고, μ§ˆνˆ¬μ‹¬μ„ μœ λ°œν•˜λŠ” κ°œμˆ˜κ°€ 4라면 μ•„λž˜μ™€ 같이 λ‚˜λˆ μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.

각 λ³΄μ„μ˜ 갯수 1 4 4 7 7
λ‚˜λˆ μ€€ λ³΄μ„μ˜ 갯수 1 4 4 4, 3 4, 3

 

λŒ“κΈ€