λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
κ°œμΈκ³΅λΆ€/Algorithm

[Level 1] 체윑볡

by πŸ‡λ°•λ΄‰λ΄‰πŸ‡ 2021. 5. 11.

 

 

 

Algorithm

-  체윑볡 -

 


 

문제

μ μ‹¬μ‹œκ°„μ— 도둑이 λ“€μ–΄, 일뢀 학생이 μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν–ˆμŠ΅λ‹ˆλ‹€.

λ‹€ν–‰νžˆ μ—¬λ²Œμ˜ 체윑볡이 μžˆλŠ” 학생이 μ΄λ“€μ—κ²Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ£Όλ €ν•©λ‹ˆλ‹€.

ν•™μƒλ“€μ˜ λ²ˆν˜ΈλŠ” 체격 순으둜 맀겨져 μžˆμ–΄, λ°”λ‘œ μ•žλ²ˆν˜Έμ˜ ν•™μƒμ΄λ‚˜ λ°”λ‘œ λ’·λ²ˆν˜Έμ˜ ν•™μƒμ—κ²Œλ§Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, 4번 학생은 3번 ν•™μƒμ΄λ‚˜ 5번 ν•™μƒμ—κ²Œλ§Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.

체윑볡이 μ—†μœΌλ©΄ μˆ˜μ—…μ„ 듀을 수 μ—†κΈ° λ•Œλ¬Έμ— μ²΄μœ‘λ³΅μ„ 적절히 빌렀 μ΅œλŒ€ν•œ λ§Žμ€ 학생이 μ²΄μœ‘μˆ˜μ—…μ„ λ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€.

 

전체 ν•™μƒμ˜ 수 n, μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν•œ ν•™μƒλ“€μ˜ λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ lost, μ—¬λ²Œμ˜ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ ν•™μƒλ“€μ˜ λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ reserveκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ²΄μœ‘μˆ˜μ—…μ„ 듀을 수 μžˆλŠ” ν•™μƒμ˜ μ΅œλŒ“κ°’μ„ λ¦¬ν„΄ν•˜λ„λ‘ ν•¨μˆ˜λ₯Ό μž‘μ„±ν•΄μ£Όμ„Έμš”.

 

- 전체 ν•™μƒμ˜ μˆ˜λŠ” 2λͺ… 이상 30λͺ… μ΄ν•˜μž…λ‹ˆλ‹€.

- μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν•œ ν•™μƒμ˜ μˆ˜λŠ” 1λͺ… 이상 nλͺ… μ΄ν•˜μ΄κ³  μ€‘λ³΅λ˜λŠ” λ²ˆν˜ΈλŠ” μ—†μŠ΅λ‹ˆλ‹€.

- μ—¬λ²Œμ˜ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ ν•™μƒμ˜ μˆ˜λŠ” 1λͺ… 이상 nλͺ… μ΄ν•˜μ΄κ³  μ€‘λ³΅λ˜λŠ” λ²ˆν˜ΈλŠ” μ—†μŠ΅λ‹ˆλ‹€.

- μ—¬λ²Œ 체윑볡이 μžˆλŠ” ν•™μƒλ§Œ λ‹€λ₯Έ ν•™μƒμ—κ²Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.

- μ—¬λ²Œ μ²΄μœ‘λ³΅μ„ κ°€μ Έμ˜¨ 학생이 μ²΄μœ‘λ³΅μ„ λ„λ‚œλ‹Ήν–ˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.
μ΄λ•Œ 이 학생은 μ²΄μœ‘λ³΅μ„ ν•˜λ‚˜λ§Œ λ„λ‚œλ‹Ήν–ˆλ‹€κ³  κ°€μ •ν•˜λ©°, 남은 체윑볡이 ν•˜λ‚˜μ΄κΈ°μ— λ‹€λ₯Έ ν•™μƒμ—κ²ŒλŠ” μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μ—†μŠ΅λ‹ˆλ‹€.

 

μž…μΆœλ ₯ μ˜ˆμ‹œ

n lost reserve return
5 [2, 4] [1, 3, 5] 5
3 [3] [1] 2

 

문제 ν’€κΈ°

 

이번 λ¬Έμ œλŠ” ν…ŒμŠ€νŠΈ ν•˜λ‚˜κ°€ 톡과가 잘 μ•ˆλΌμ„œ μ• λ₯Ό 먹은 λ¬Έμ œμ˜€λ‹€.

 

λ¬Έμ œλŠ” μ²΄μœ‘μ‹œκ°„μ— μ²΄μœ‘λ³΅μ„ μžƒμ–΄λ²„λ¦° μ‚¬λžŒμ—κ²Œ μ—¬λ²Œμ˜·μ΄ μžˆλŠ” μ‚¬λžŒμ΄ μ‚¬μ΄μ¦ˆκ°€ +1μ΄κ±°λ‚˜ -1인 μ‚¬λžŒμ— ν•œν•΄μ„œ μ²΄μœ‘λ³΅μ„ 빌렀주고 체윑 μˆ˜μ—…μ„ μ΅œλŒ€ λͺ‡λͺ…이 듀을 수 μžˆλ‚˜μ— λŒ€ν•œ λ¬Έμ œμ˜€λŠ”λ° 문제λ₯Ό ν•΄κ²°ν•˜κΈ° 전에 κ³ λ €ν•΄μ•Όν•  사항은 μ—¬λ²Œμ˜·μ΄ μžˆλŠ” μ‚¬λžŒλ„ μ˜·μ„ ν•œλ²Œ μžƒμ–΄λ²„λ¦΄ 수 μžˆλ‹€λŠ” 것이닀.

 

κ·Έλž˜μ„œ λ§Œμ•½ μ—¬λ²Œμ˜·μ΄ μžˆλŠ” μ‚¬λžŒμ΄ μ²΄μœ‘λ³΅μ„ μžƒμ–΄λ²„λ¦¬κ²Œλ˜λ©΄ λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ μ²΄μœ‘λ³΅μ„ λΉŒλ €μ€„ 수 μ—†λ‹€λŠ” 것이닀.

 

이점을 μ΄ν•΄ν•˜κ³  일단은 λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„μ˜€λŠ” lost와 reserveμ—μ„œ μ—¬λ²Œμ˜·μ΄ μ—†λŠ” μ§„μ§œ lost와 μ²΄μœ‘λ³΅μ„ μžƒμ–΄λ²„λ¦¬μ§€ μ•Šμ€ μ—¬λ²Œμ˜·μ„ 가진 μ§„μ§œ reserve을 κ΅¬ν•˜κΈ° μœ„ν•΄μ„œ filterλ₯Ό μ‚¬μš©ν•΄μ„œ realLost와 reslReserveλ₯Ό λ§Œλ“€μ–΄ μ£Όμ—ˆλ‹€.

 

그리고 λ°˜λ³΅λ¬Έμ„ ν’€κΈ° 전에 μ΄ˆκΈ°κ°’μ„ 전체 λͺ…μˆ˜μ—μ„œ realLost을 λΉΌμ„œ μ²΄μœ‘λ³΅μ„ μžƒμ–΄λ²„λ¦¬μ§€ μ•Šμ•˜κ±°λ‚˜ μ—¬λ²Œμ˜·μ΄ μžˆμ–΄μ„œ λΉŒλ¦¬μ§€ μ•Šμ•„λ„ λ˜λŠ” μ‚¬λžŒμ„ μ΄ˆκΈ°κ°’μœΌλ‘œ μ„€μ •ν•΄μ£Όμ—ˆλ‹€.

 

반볡문 μ•ˆμ—μ„œλŠ” μžƒμ–΄λ²„λ¦° μ‚¬λžŒμ˜ μ‚¬μ΄μ¦ˆκ°€ +1, -1 λ˜λŠ” κΈ°μ€€μœΌλ‘œ μ—¬λ²Œμ˜·μ΄ μžˆμ„ 경우 μ˜·μ„ 빌렀 μˆ˜μ—…μ„ 듀을 수 있기 λ•Œλ¬Έμ— resultλ₯Ό +1 ν•΄μ£Όκ³ , 이제 ν•΄λ‹Ή μ‚¬μ΄μ¦ˆμ˜ μ—¬λ²Œμ˜·μ€ 더이상 λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ λΉŒλ €μ€„ 수 μ—†κΈ° λ•Œλ¬Έμ— λ°°μ—΄μ•ˆμ— λ‹€λ₯Έ 값을 λŒ€μ²΄ν•΄μ„œ λ„£μ–΄μ€€λ‹€.

 

μ΄λ•Œ μ€‘μš”ν–ˆλ˜κ²Œ λ‚˜λŠ” μ²˜μŒμ— μ—†λ‹€λŠ” 의미둜 realReserve[j] κ°’ μ•ˆμ— 0을 λ„£μ–΄μ„œ ν…ŒμŠ€νŠΈλ₯Ό λŒλ Έμ—ˆλŠ”λ° 였λ₯˜κ°€ κ³„μ†λ‚˜μ„œ 곰곰히 μƒκ°ν•΄λ³΄λ‹ˆ μ²΄μœ‘λ³΅μ„ μžƒμ–΄λ²„λ¦° μ‚¬λžŒμ˜ μ‚¬μ΄μ¦ˆκ°€ 1일 경우 μ‚¬μ΄μ¦ˆ 0κ³Ό 2λ₯Ό μž…μ„ 수 μžˆμ–΄μ„œ 0에 ν˜Όλ™μ΄ λ‚˜μ„œ μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚€λŠ” 것같아 λ‹€λ₯Έκ°’(-1)으둜 μ„€μ •ν•΄ μ£Όμ—ˆλ”λ‹ˆ ν…ŒμŠ€νŠΈκ°€ ν†΅κ³Όλ˜μ—ˆλ‹€.

(μ‚¬μ΄μ¦ˆ0 μ˜·μ‚¬μ΄μ¦ˆκ°€ μžˆμ„μ§€λŠ” 의문....γ…Žγ…Žγ…Ž)

 

κ·ΈλŸ°λ‹€μŒ ν•΄λ‹Ή 쑰건문에 λ“€μ–΄κ°„ μ‚¬λžŒμ€ 이미 μ˜·μ„ 찾은 μ‚¬λžŒμ΄κΈ° λ•Œλ¬Έμ— 계속 μ—¬λ²Œμ˜·μ„ μ°ΎλŠ” λ°˜λ³΅λ¬Έμ•ˆμ— 더이상 μžˆμ„ μ΄μœ κ°€ μ—†κΈ° λ•Œλ¬Έμ— breakλ₯Ό κ±Έμ–΄ λ°˜λ³΅λ¬Έμ„ λ²—μ–΄λ‚˜κ²Œ μ„€μ •ν•΄μ£Όμ—ˆλ”λ‹ˆ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆλ‹€.

 

휴... ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€κ°€ μ•ˆλ³΄μ—¬μ„œ μ• λ₯Ό μ’€ λ¨Ήμ–΄μ„œ 쀑간에 μ΄νƒˆλ„ μ’€ ν•˜κ³  멍을 λ•Œλ ΈλŠ”λ° κ·Έλž˜λ„ μ–΄μ°Œμ–΄μ°Œ ν•΄κ²°λ˜μ–΄μ„œ 정말 닀행이닀.

 

레벨1이 곧 λ§ˆλ¬΄λ¦¬κ°€ λ˜λ‹ˆ μ΅œμ„ μ„ λ‹€ν•˜μž!

 

 

λ°˜μ‘ν˜•

λŒ“κΈ€