Skip to content

Conversation

@dohyeondol1
Copy link
Contributor

@dohyeondol1 dohyeondol1 commented Jul 19, 2025

πŸ”— 문제 링크

λŒ€νšŒ 개졜

βœ”οΈ μ†Œμš”λœ μ‹œκ°„

15m

✨ μˆ˜λ„ μ½”λ“œ

μ œκ°€ ν’€μ—ˆλ˜ κ³¨λ“œ5 문제 쀑에 μ—­λŒ€κΈ‰μœΌλ‘œ μ‰¬μš΄ λ¬Έμ œκ°€ μ•„λ‹Œκ°€ μ‹ΆμŠ΅λ‹ˆλ‹€..

μ €λŠ” 이 문제λ₯Ό 그리디 μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ ν•΄κ²°ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
이뢄 탐색 풀이도 있던데.. ν˜Ήμ‹œ μ΄λΆ„νƒμƒ‰μœΌλ‘œ ν‘Έμ‹  뢄이 μžˆλ‹€λ©΄ λ‚¨κ²¨μ£Όμ„Έμš©.

E, EM, M, MH, H 총 5λ‹¨κ³„μ˜ 문제 개수λ₯Ό μž…λ ₯λ°›κ³ 

E, M, H의 μ„Έ if문으둜 λ‚˜λˆ„μ–΄ 각각의 문제 κ°œμˆ˜κ°€ μ–‘μˆ˜μΌλ•Œ μš°μ„ μ μœΌλ‘œ μ‚¬μš©ν•˜κ³ 
λΆ€μ‘±ν•œ 경우 EM, (EM, MH λ‘˜ 쀑 큰값), MHλ₯Ό λŒ€μ‹  μ‚¬μš©ν•˜λ„λ‘ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

μˆ˜λ„μ½”λ“œκ°€ 정말 μ‰¬μ›Œμ„œ μ΄λ²ˆμ—” λ§ˆμ§€λ§‰μ— λ°°μΉ˜ν–ˆμŠ΅λ‹ˆλ‹€..γ…Ž

μˆ˜λ„ μ½”λ“œ
μž…λ ₯: easy, easyMedium, medium, mediumHigh, high

totalCompetition ← 0

반볡:
    easySubmitted ← false
    mediumSubmitted ← false
    highSubmitted ← false

    // μ‰¬μš΄ 문제 제좜 μ‹œλ„
    λ§Œμ•½ easy > 0 이면:
        easy ← easy - 1
        easySubmitted ← true
    μ•„λ‹ˆλ©΄ λ§Œμ•½ easyMedium > 0 이면:
        easyMedium ← easyMedium - 1
        easySubmitted ← true

    // 쀑간 문제 제좜 μ‹œλ„
    λ§Œμ•½ medium > 0 이면:
        medium ← medium - 1
        mediumSubmitted ← true
    μ•„λ‹ˆλ©΄ λ§Œμ•½ easyMedium > 0 λ˜λŠ” mediumHigh > 0 이면:
        λ§Œμ•½ easyMedium β‰₯ mediumHigh 이면:
            easyMedium ← easyMedium - 1
        μ•„λ‹ˆλ©΄:
            mediumHigh ← mediumHigh - 1
        mediumSubmitted ← true

    // μ–΄λ €μš΄ 문제 제좜 μ‹œλ„
    λ§Œμ•½ high > 0 이면:
        high ← high - 1
        highSubmitted ← true
    μ•„λ‹ˆλ©΄ λ§Œμ•½ mediumHigh > 0 이면:
        mediumHigh ← mediumHigh - 1
        highSubmitted ← true

    // λͺ¨λ“  λ‚œμ΄λ„μ—μ„œ 제좜 μ‹€νŒ¨ν•˜λ©΄ μ’…λ£Œ
    λ§Œμ•½ easySubmitted = false λ˜λŠ” mediumSubmitted = false λ˜λŠ” highSubmitted = false 이면:
        반볡 μ’…λ£Œ

    totalCompetition ← totalCompetition + 1

좜λ ₯: totalCompetition

μ½”λ“œλ₯Ό κ°œμ„ ν•  수 μžˆμ„κ²ƒ κ°™λ‹€λŠ” 생각도 ν•˜λŠ”λ°, μ €λŠ” λ– μ˜€λ₯΄λŠ” 아이디어가 μ—†λ„€μš”...
μ—¬λŸ¬λΆ„μ΄ 제 μ½”λ“œλ₯Ό λ³΄μ‹œκ³  μ–΄λ–€ 뢀뢄을 κ°œμ„ ν•  수 μžˆμ„μ§€ μ•Œλ €μ£Όμ„Έμš”!

이제 μ‰¬μš΄ κ·Έλ¦¬λ””λŠ” μ‘Έμ—…ν•  수 μžˆμ„ κ°™μŠ΅λ‹ˆλ‹€..!
λ‹€μŒ PRμ—μ„œ 그리디λ₯Ό μž‘μ„±ν•˜κ²Œ λœλ‹€λ©΄ 쑰금 더 λ‚œμ΄λ„ μžˆλŠ” μž¬λ°ŒλŠ” 문제λ₯Ό κ°€μ Έμ˜€λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

πŸ“š μƒˆλ‘­κ²Œ μ•Œκ²Œλœ λ‚΄μš©

@froglike6
Copy link
Collaborator

μ €λŠ” 그리디λ₯Ό 톡해 $t$개의 λŒ€νšŒλ₯Ό μ—΄ 수 μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” check ν•¨μˆ˜λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. 그리고 lowλ₯Ό 0으둜, highλ₯Ό min(e+em, e+em+mh, h+mh)으둜 μž‘μ•„ 이뢄탐색을 돌며 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.
λΆ„λͺ… μ΄λΆ„νƒμƒ‰μœΌλ‘œ ν‘ΈλŠ”κ²Œ 더 λΉ λ₯Όν…λ°, 파이썬이라 κ·ΈλŸ°μ§€ μ’€ 더 λŠλ¦¬λ„€μš” γ…Žγ…Ž..

import sys
input = sys.stdin.readline

e, em, m, mh, h = map(int, input().split())

def check(t):
    need_e = t - e
    if need_e > 0:
        if need_e > em:
            return False
        rem_em = em - need_e
    else:
        rem_em = em
    need_h = t - h
    if need_h > 0:
        if need_h > mh:
            return False
        rem_mh = mh - need_h
    else:
        rem_mh = mh
    return m + rem_em + rem_mh >= t

low = 0
high = min(e+em, e+em+mh, h+mh)
ans = 0
while low <= high:
    mid = (low + high) // 2
    if check(mid):
        ans = mid
        low = mid + 1
    else:
        high = mid - 1
print(ans)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bool이라 큰 상관은 없을 것 같은데, μ΄λ ‡κ²Œ λœλ‹€λ©΄ λ°˜λ³΅λ¬Έμ„ 돌 λ•Œλ§ˆλ‹€ 선언이 λ˜λ‹ˆ λ©”λͺ¨λ¦¬λ₯Ό 쑰금 더 먹을 것 κ°™μ•„μš”! γ…Žγ…Ž

@Fnhid
Copy link
Collaborator

Fnhid commented Jul 22, 2025

저도 이뢄 탐색을 μ‚¬μš©ν•΄μ„œ ν•΄κ²°ν•΄ λ³΄μ•˜μŠ΅λ‹ˆλ‹€.
upper bound은 κ·Έλƒ₯ λ„‰λ„‰νžˆ μž‘μ•„μ€¬μ–΄μš”

#include <iostream>
using namespace std;

int pr[5];

bool check(int k) {
    int need_e = max(0, k - pr[0]);
    int need_h = max(0, k - pr[4]);
    if (need_e > pr[1] || need_h > pr[3]) return false;
    int em_remain = pr[1] - need_e;
    int mh_remain = pr[3] - need_h;
    int total_m = pr[2] + em_remain + mh_remain;
    return total_m >= k;
}

int main() {
    for (int i = 0; i < 5; ++i) cin >> pr[i];
    int l = 0, r = pr[0] + pr[1] + pr[2] + pr[3] + pr[4];
    int res = 0;
    while (l <= r) {
        int mid = (l + r) / 2;
        if (check(mid)) {
            res = mid;
            l = mid + 1;
        } else {
            r = mid - 1;
        }
    }
    cout << res << endl;
}

@dohyeondol1 dohyeondol1 removed the request for review from hadongun July 28, 2025 10:36
@dohyeondol1 dohyeondol1 merged commit c6cd32f into main Jul 28, 2025
1 check passed
@dohyeondol1 dohyeondol1 deleted the 22-dohyeondol1 branch August 18, 2025 04:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants