πŸ‘¨β€πŸ’» Seungineer's GitHub Contribution

🧭 KAIST JUNGLE/Algorithm

[SW μ •κΈ€ 20일차] λ°˜λ‘€κ°€ μ‘΄μž¬ν•˜λŠ” 것 κ°™μ•˜λŠ”λ°..! μ—†μ—ˆλ‹€ (λ°±μ€€1931 파이썬)

seungineer = seungwoo + engineer 2024. 3. 31. 03:26

λ°±μ€€ 1931 문제λ₯Ό ν’€λ‹€κ°€ 85%μ—μ„œ 'ν‹€λ ΈμŠ΅λ‹ˆλ‹€'κ°€ λ‚˜μ™”κ³ , ν‹€λ¦¬κ²Œ λ§Œλ“  μΌ€μ΄μŠ€μ— λŒ€ν•΄μ„œ 고민을 ν•˜μ˜€λ‹€. λͺ‡ 가지 λ°˜λ‘€λ₯Ό 찾을 수 μžˆμ—ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•œ μ½”λ“œλ₯Ό μ œμΆœν•˜μ—¬ 'λ§žμ•˜μŠ΅λ‹ˆλ‹€'κ°€ λ‚˜μ™”λ‹€. 제좜 이후 문득 μƒκ°λ‚œ μΌ€μ΄μŠ€κ°€ μžˆμ–΄ 'λ§žμ•˜μŠ΅λ‹ˆλ‹€'κ°€ λ‚˜μ˜¨ μ½”λ“œμ— λ„£μ–΄μ„œ ν…ŒμŠ€νŠΈν•΄ λ³΄μ•˜λ‹€. μ˜ˆμƒ 결과와 λ‹€λ₯Έ 값을 좜λ ₯ν–ˆλ‹€. λ°±μ€€μ—μ„œ κ²€μ¦ν•˜μ§€ μ•Šμ€ μΌ€μ΄μŠ€μΈ 쀄 μ•Œμ•˜μ§€λ§Œ, 글을 μ“°λ©΄μ„œ λ‚΄κ°€ 생각을 잘λͺ»ν–ˆλ‹€λŠ” 것을 κΉ¨λ‹¬μ•˜λ‹€... πŸ’©

κ·Έλž˜λ„ μž κΉμ΄λ‚˜λ§ˆ λ°±μ€€ μ‚¬μ΄νŠΈμ˜ '데이터λ₯Ό μΆ”κ°€ν•œ μ‚¬λžŒ' λ¦¬μŠ€νŠΈμ— 이름을 올릴 수 μžˆλ‚˜ ν–‰λ³΅νšŒλ‘œλ₯Ό λŒλ ΈκΈ°μ— κΈ°λ‘ν•΄λ‘κ³ μž ν•œλ‹€.

 

λ°±μ€€ 1931 문제 μš”μ•½

μž…λ ₯λ˜λŠ” N개의 회의 μ‹œμž‘, 끝 μ‹œκ°μ„ λ°”νƒ•μœΌλ‘œ κ°€μž₯ λ§Žμ€ 회의λ₯Ό 진행할 수 μžˆλŠ” 경우의 수λ₯Ό 좜λ ₯ν•˜λŠ” 것이닀. λ¬Όλ‘  νšŒμ˜μ‹€μ΄ 1κ°œμ΄κΈ°μ— λ¬Έμ œκ°€ 되고, λ™μ‹œμ— 회의λ₯Ό μ§„ν–‰ν•˜κ±°λ‚˜ 쀑간에 λŠκΈ°λŠ” κ²½μš°λŠ” μ—†λ‹€.

문제 μ ‘κ·Ό

더보기

μ²˜μŒμ—λŠ” 회의 μ‹œμž‘ μ‹œκ°μ΄ μ€‘μš”ν•˜λ‹€κ³  μƒκ°ν•˜μ˜€μœΌλ‚˜, μ‹œμž‘ μ‹œκ°μœΌλ‘œ μ ‘κ·Όν•  경우 '끝 μ‹œκ° - μ‹œμž‘ μ‹œκ°'이 κ³ λ €λ˜μ§€ μ•ŠκΈ°μ— ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ—λ„ 적용이 λ˜μ§€ μ•Šμ•˜λ‹€. 이후 회의 μ‹œκ°„μ„ κ³ λ €ν•˜κ³ μž ν•˜μ˜€μœΌλ‚˜ μ‹œμž‘, 끝 μ‹œκ°μ΄ κ²Ήμ³μ§€λŠ” κ²½μš°κ°€ μžˆμ–΄ ν•΄κ²°λ˜μ§€ μ•Šμ•˜λ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ νšŒμ˜κ°€ λλ‚˜λŠ” μ‹œκ°을 κΈ°μ€€μœΌλ‘œ μ ‘κ·Όν•˜μ˜€λ‹€.

νšŒμ˜κ°€ λλ‚˜λŠ” μ‹œκ°μ΄ λΉ λ₯Έ 순으둜 μ •λ ¬ν•˜μ—¬ μ•žμ—μ„œλΆ€ν„°(=빨리 λλ‚˜λŠ” νšŒμ˜λΆ€ν„°) 회의λ₯Ό μ„ νƒν•˜λ©΄ λœλ‹€. μ΄λ•Œ, μ„ νƒλ˜μ—ˆλ˜ νšŒμ˜κ°€ λλ‚˜λŠ” μ‹œκ°λ³΄λ‹€ λ‹€μŒ  회의의 μ‹œμž‘ μ‹œκ°μ΄ 더 빨라야 ν•œλ‹€. λ§Œμ•½, λλ‚˜λŠ” μ‹œκ°μ΄ 같은 νšŒμ˜κ°€ μžˆμ„ λ•ŒλŠ” μ‹œμž‘ μ‹œκ°μ΄ 더 λΉ λ₯Έ νšŒμ˜κ°€ λ¨Όμ € μ„ νƒλ˜λ„λ‘ 정렬이 ν•„μš”ν•˜λ‹€.

λ°˜λ‘€(인 쀄 μ•Œμ•˜μ§€λ§Œ μ•„λ‹ˆμ—ˆλ˜ 것)

μ‹œμž‘ μ‹œκ° 끝 μ‹œκ° μž…λ ₯
1 2 5
1 2
2 4
3 4
3 4
5 5
5 5
2 4
3 4
3 4
5 5
5 5

μœ„ μΌ€μ΄μŠ€μ˜ 'μ΅œλŒ€ μ‚¬μš©ν•  수 μžˆλŠ” 회의'의 μ΅œλŒ€  κ°œμˆ˜λŠ” 4이닀. 1 → 2 /→ 4 / 5 → 5 / 5 → 5 순으둜 회의λ₯Ό μ„ νƒν•˜λŠ” 것이닀. λ‚˜λŠ” 5 → 5 처럼 μ‹œμž‘κ³Ό 끝이 같은 μ‹œκ°μΈ μΌ€μ΄μŠ€λ₯Ό μ‘΄μž¬ν•˜λŠ” 개수 만큼 λ°˜μ˜ν•΄μ•Ό ν•œλ‹€λŠ” 점을 κ³ λ €ν•˜λ©΄μ„œ, 3 → 4 κ°€ μ€‘λ³΅λ˜λŠ” 것도 두 개둜 μΉ΄μš΄νŠΈν•˜κΈ° μœ„ν•΄ 2 → 4 λŒ€μ‹  3 → 4λ₯Ό 선택해야 ν•˜λŠ” 것이 μ•„λ‹Œκ°€ μƒκ°ν–ˆλ‹€.

λ¬Έμ œμ—μ„œ λ™μ‹œμ— 회의λ₯Ό 진행할 수 μ—†λ‹€λŠ” 쑰건도 있고, 처음, 끝 μ‹œκ°μ΄ 같은 μΌ€μ΄μŠ€λŠ” λ™μ‹œμ— 순차적으둜 κ°€λŠ₯ν•˜λ‹€λŠ” μ μ—μ„œ 3 → 4 μΌ€μ΄μŠ€μ™€λŠ” λ‹€λ₯΄λ‹€.

 

μ΄λ ‡κ²Œ 문제λ₯Ό μ˜€ν•΄ν•˜μ—¬ λ°˜λ‘€λ₯Ό μƒκ°ν–ˆλ˜ 적은 μ²˜μŒμ΄μ—ˆλ‹€.

 

'데이터λ₯Ό μΆ”κ°€ν•œ μ‚¬λžŒ'에 이름 λ„£κΈ°λŠ” ν—ˆλ¬΄ν•˜κ²Œ 끝이났닀 ^^.... κ·Έλž˜λ„ 즐거웠닀...

μ½”λ“œ

n = int(input())

time_table = []
for i in range(n):
    st, en = map(int, input().split())
    # μ‹œμž‘, μ§€μ†μ‹œκ°„, 끝[ [1, 3, 4], [3, 2, 5], ... , [12, 2, 14] ]
    time_table.append([st, en])

time_table.sort(key=lambda x :(x[1],x[0])) #λλ‚˜λŠ” μ‹œκ°„, μ‹œμž‘ μ‹œκ°„ κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœ μ •λ ¬

cnt = 0
last_endtime = 0

for i in range(len(time_table)):
    if last_endtime <= time_table[i][0]: # μ§€λ‚œ 회의 끝 μ‹œμ  <= μ§€κΈˆ 회의 μ‹œμž‘ μ‹œμ 
        last_endtime = time_table[i][1]
        cnt += 1 # 횟수 μΆ”κ°€
        print(f"{cnt}번 μ§Έ 회의의 μ‹œμž‘ μ‹œκ°: {time_table[i][0]} 끝 μ‹œκ°: {time_table[i][1]}")
print(cnt)

 


ν•΄μ•Όν•  것(ν•˜κ³  싢은 것)은 λ§Žμ€λ°,

μ‹œκ°„μ΄ λ„ˆλ¬΄ 빨리 κ°„λ‹€.

λˆ„κ°€ μ‹œκ°„ μ’€ 멈좰쀬으면 μ’‹κ² λ‹€.