[Baekjoon/πŸ₯ˆSilverβ…‘] 1931: νšŒμ˜μ‹€ λ°°μ •

2 λΆ„ μ†Œμš”

πŸ“ƒλ¬Έμ œ

ν•œ 개의 νšŒμ˜μ‹€μ΄ μžˆλŠ”λ° 이λ₯Ό μ‚¬μš©ν•˜κ³ μž ν•˜λŠ” N개의 νšŒμ˜μ— λŒ€ν•˜μ—¬ νšŒμ˜μ‹€ μ‚¬μš©ν‘œλ₯Ό λ§Œλ“€λ €κ³  ν•œλ‹€. 각 회의 I에 λŒ€ν•΄ μ‹œμž‘μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ μ£Όμ–΄μ Έ 있고, 각 νšŒμ˜κ°€ κ²ΉμΉ˜μ§€ μ•Šκ²Œ ν•˜λ©΄μ„œ νšŒμ˜μ‹€μ„ μ‚¬μš©ν•  수 μžˆλŠ” 회의의 μ΅œλŒ€ 개수λ₯Ό μ°Ύμ•„λ³΄μž. 단, νšŒμ˜λŠ” ν•œλ²ˆ μ‹œμž‘ν•˜λ©΄ 쀑간에 쀑단될 수 μ—†μœΌλ©° ν•œ νšŒμ˜κ°€ λλ‚˜λŠ” 것과 λ™μ‹œμ— λ‹€μŒ νšŒμ˜κ°€ μ‹œμž‘λ  수 μžˆλ‹€. 회의의 μ‹œμž‘μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ 같을 μˆ˜λ„ μžˆλ‹€. 이 κ²½μš°μ—λŠ” μ‹œμž‘ν•˜μžλ§ˆμž λλ‚˜λŠ” κ²ƒμœΌλ‘œ μƒκ°ν•˜λ©΄ λœλ‹€.

πŸ“ƒμž…λ ₯

첫째 쀄에 회의의 수 N(1 ≀ N ≀ 100,000)이 주어진닀. λ‘˜μ§Έ 쀄뢀터 N+1 μ€„κΉŒμ§€ 각 회의의 정보가 μ£Όμ–΄μ§€λŠ”λ° 이것은 곡백을 사이에 두고 회의의 μ‹œμž‘μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ 주어진닀. μ‹œμž‘ μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ€ 231-1보닀 μž‘κ±°λ‚˜ 같은 μžμ—°μˆ˜ λ˜λŠ” 0이닀.

πŸ“ƒμΆœλ ₯

첫째 쀄에 μ΅œλŒ€ μ‚¬μš©ν•  수 μžˆλŠ” 회의의 μ΅œλŒ€ 개수λ₯Ό 좜λ ₯ν•œλ‹€.

문제

πŸ™‹β€β™€οΈμ ‘κ·Ό 방법

πŸ””λ¬Έμ œ 속 핡심!

πŸ‘© 문제 μ†μ—μ„œ 주의깊게 봐야 ν•  뢀뢄은 λ°”λ‘œ β€˜νšŒμ˜μ˜ μ‹œμž‘ μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ 같을 μˆ˜λ„ μžˆλ‹€β€™λŠ” 뢀뢄이닀.

  • 예둜 ν•΄λ‹Ή μž…λ ₯듀을 μ‚΄νŽ΄λ³΄μž.
    • N = 2
    • 1, 1/ 1, 1

    πŸ‘© 이와 같이 μ£Όμ–΄μ‘Œμ„ λ•Œ, νšŒμ˜μ‹€μ„ μ‚¬μš©ν•  수 μžˆλŠ” 회의의 μ΅œλŒ€ κ°œμˆ˜λŠ” λͺ‡κ°œμΌκΉŒ??

    • 닡은 2κ°œμ΄λ‹€. μ‹œμž‘, 끝 μ‹œκ°„μ΄ κ°™μœΌλ―€λ‘œ μ‹œμž‘ν•˜μžλ§ˆμž λλ‚˜κΈ° λ•Œλ¬Έμ— 두 회의λ₯Ό 같은 μ‹œκ°„μ— 넣어도 νšŒμ˜κ°€ κ²ΉμΉ˜μ§€ μ•Šκ²Œ λ˜λŠ” 것이닀.

πŸ“ƒλ¬Έμ œ 뢄석

πŸ‘© νšŒμ˜μ‹€μ„ μ‚¬μš©ν•  수 μžˆλŠ” 회의의 μ΅œλŒ€ 개수λ₯Ό κ΅¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” 짧게 κ±Έλ¦¬λŠ” 회의λ₯Ό μœ„μ£Όλ‘œ 회의λ₯Ό 선택해야 ν•œλ‹€.

πŸ‘© κ·Έλ ‡λ‹€λ©΄ κ±Έλ¦¬λŠ” μ‹œκ°„ 순으둜 정렬을 ν•΄ μž‘μ€ 순으둜 회의λ₯Ό λ°°μΉ˜ν•˜λ©΄ 될까??

그것은 μ•„λ‹ˆλ‹€!!!

  • 기본적으둜 μ•ž νšŒμ˜κ°€ μ–Έμ œ λλ‚˜λŠλƒμ— λ”°λΌμ„œ λ’· νšŒμ˜κ°€ κ²°μ •λœλ‹€. λ”°λΌμ„œ λ‹¨μˆœνžˆ κ±Έλ¦¬λŠ” μ‹œκ°„ 순이 μ•„λ‹Œ μš°μ„  λλ‚˜λŠ” μ‹œκ°„ 순으둜 μ •λ ¬ν•΄μ•Ό ν•œλ‹€.
    • κ·Έλž˜μ•Ό ν•΄λ‹Ή 회의 μ΄ν›„μ˜ νšŒμ˜λ“€ 쀑, λ‹€μŒμ— λ°°μΉ˜ν•  회의λ₯Ό 선택할 수 있게 λœλ‹€.
  • 그리고 μ—¬κΈ°μ„œ μΆ”κ°€μ μœΌλ‘œ!! μ‹œμž‘ν•˜λŠ” μ‹œκ°„κ³Ό λλ‚˜λŠ” μ‹œκ°„μ΄ 같은 νšŒμ˜κ°€ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— λλ‚˜λŠ” μ‹œκ°„μˆœμœΌλ‘œ μ •λ ¬ν•œ ν›„, μ‹œμž‘ν•˜λŠ” μ‹œκ°„μˆœμœΌλ‘œ μΆ”κ°€ μ •λ ¬ν•΄μ•Ό ν•œλ‹€.
    • ν•„μžλŠ” μ‹œμž‘ν•˜λŠ” 순으둜 μΆ”κ°€ μ •λ ¬ν•˜μ§€ μ•Šμ•„ μ’€ κ³ μƒν–ˆλ‹€..γ…Žγ…Ž

πŸ‘©β€πŸ’» Algorithm

πŸ‘© κ·Έλ ‡λ‹€λ©΄ μœ„ λ‚΄μš©μ„ 기반으둜 μž‘μ„±ν•œ μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄μž.

#21.11.16
#그리디
import sys
N = int(sys.stdin.readline().rstrip())
lst = []
count = 0
for i in range(N):
  lst.append(list(map(int, sys.stdin.readline().rstrip().split())))
# λλ‚˜λŠ” μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ μ •λ ¬ 
# λλ‚˜λŠ” μ‹œκ°„μ΄ 동일할 경우, μ‹œμž‘μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ μ •λ ¬
lst.sort(key= lambda i : (i[1], i[0]))

k, l = lst[0] 
for j in range(1, N):
  n, o = lst[j]
  # μ‹œμž‘μ‹œκ°„μ΄ 이전 회의의 λλ‚˜λŠ” μ‹œκ°„κ³Ό κ°™κ±°λ‚˜, 그보닀 클 λ•Œ
  if n >= l:
    count += 1
    k, l = n, o

print(count + 1)

κ²°κ³Ό

πŸ‘© κ·Έλ ‡λ‹€λ©΄ κ·Έ 과정을 μžμ„Ένžˆ μ‚΄νŽ΄λ³΄μž!!!

  • μš°μ„  λλ‚˜λŠ” μ‹œκ°„μ΄ κ°€μž₯ λΉ λ₯Έ νšŒμ˜κ°€ 기쀀이 λœλ‹€. (lst[0])
  • 기쀀을 μ œμ™Έν•œ λ‚˜λ¨Έμ§€ νšŒμ˜λ“€μ„ 돌며 λ‹€μŒμ˜ 과정을 λ°˜λ³΅ν•œλ‹€.
    • κΈ°μ€€ 회의의 λλ‚˜λŠ” μ‹œκ°„λ³΄λ‹€ μ‹œμž‘μ‹œκ°„μ΄ ν¬κ±°λ‚˜ 같을 λ•Œ
    • κΈ°μ€€ νšŒμ˜λŠ” νšŒμ˜μ‹€μ— λ°°μΉ˜ν•΄λ„ λ˜λŠ” 상황이닀. (count + 1)
    • κΈ°μ€€ 회의λ₯Ό μ—…ν…Œμ΄νŠΈν•œλ‹€.



😢 μ—¬κΈ°μ„œ 잠깐!! μ•„λ§ˆ λ‹€μŒμ˜ κ³Όμ •μ—μ„œ μ‹œμž‘μ‹œκ°„μ΄ κΈ°μ€€ 회의의 μ‹œμž‘μ‹œκ°„λ³΄λ‹€ μž‘μ„ κ²½μš°λŠ” μ™œ μ²˜λ¦¬ν•˜μ§€ μ•Šμ„κΉŒ?

for j in range(1, N):
  n, o = lst[j]
  # μ‹œμž‘μ‹œκ°„μ΄ 이전 회의의 λλ‚˜λŠ” μ‹œκ°„κ³Ό κ°™κ±°λ‚˜, 그보닀 클 λ•Œ
  if n >= l:
    count += 1
    k, l = n, o
  • κΈ°μ€€ νšŒμ˜λ³΄λ‹€ μ‹œμž‘μ‹œκ°„μ΄ μž‘μ„ 경우 λ‹€μŒκ³Ό 같이 μ •μ˜λœλ‹€.
    • λλ‚˜λŠ” μ‹œκ°„μ€ κΈ°μ€€νšŒμ˜λ³΄λ‹€ λŠλ¦¬λ‹€.
    • μ‹œμž‘ μ‹œκ°„μ€ κΈ°μ€€νšŒμ˜λ³΄λ‹€ λΉ λ₯΄λ‹€.

    β‡’ 결과적으둜 νšŒμ˜μ‹œκ°„μ΄ κΈ°μ€€νšŒμ˜λ³΄λ‹€ κΈ΄ νšŒμ˜μ΄λ―€λ‘œ κ³ λ €ν•  ν•„μš”κ°€ μ—†λ‹€!



πŸ€·β€β™€οΈ κ·Έλ ‡λ‹€λ©΄ μ™œ λ§ˆμ§€λ§‰μ— count + 1을 ν•΄μ£ΌλŠ” κ²ƒμΌκΉŒ?

for문이 λλ‚˜λŠ” 경우, 상황은 두 가지가 μ‘΄μž¬ν•œλ‹€.

  • 상황1: μ •λ ¬ κ°€μž₯ λ§ˆμ§€λ§‰ νšŒμ˜κ°€ 기쀀이 되며 λλ‚˜λŠ” 경우
  • 상황2: κΈ°μ€€ 회의의 λλ‚˜λŠ” μ‹œκ°„λ³΄λ‹€ μ‹œμž‘μ‹œκ°„μ΄ ν¬κ±°λ‚˜ 같은 νšŒμ˜κ°€ μ—†λŠ” μƒνƒœμ—μ„œ for문이 μ’…λ£Œλœ 경우

두 가지 μƒν™©μ—μ„œ count + 1을 ν•΄μ•Ό ν•˜λŠ” μ΄μœ λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

  • 상황1: λ§ˆμ§€λ§‰ νšŒμ˜λ„ νšŒμ˜μ‹€ λ°°μΉ˜μ— ν¬ν•¨λ˜κΈ° λ•Œλ¬Έμ΄λ‹€.
  • 상황2: κΈ°μ€€νšŒμ˜λ„ νšŒμ˜μ‹€ λ°°μΉ˜μ— ν¬ν•¨λ˜κΈ° λ•Œλ¬Έμ΄λ‹€.

λ”°λΌμ„œ λ§ˆμ§€λ§‰μ—λŠ” count에 1을 λ”ν•œ 값을 좜λ ₯ν•˜κ²Œ λœλ‹€.


κ·Έλ ‡λ‹€λ©΄ 이번 κ²Œμ‹œκΈ€μ€

μ—¬κΈ°μ„œ

이만 ~~ ~(Λ˜β–ΎΛ˜~)

πŸ“ƒμ°Έκ³ 

  • https://suri78.tistory.com/26
  • https://pacific-ocean.tistory.com/236

λŒ“κΈ€λ‚¨κΈ°κΈ°