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

[Level 1] μ‹€νŒ¨μœ¨

by πŸ‡λ°•λ΄‰λ΄‰πŸ‡ 2021. 3. 31.

 

 

 

Algorithm

-  μ‹€νŒ¨μœ¨ -

 


 

문제

슈퍼 κ²Œμž„ 개발자 μ˜€λ λ¦¬λŠ” 큰 고민에 λΉ μ‘Œλ‹€.

κ·Έλ…€κ°€ λ§Œλ“  ν”„λ Œμ¦ˆ μ˜€μ²œμ„±μ΄ λŒ€μ„±κ³΅μ„ κ±°λ’€μ§€λ§Œ, μš”μ¦˜ μ‹ κ·œ μ‚¬μš”μ΄μžμ˜ μˆ˜κ°€ κΈ‰κ°ν•œ 것이닀.

원인은 μ‹ κ·œ μ‚¬μš©μžμ™€ κΈ°μ‘΄ μ‚¬μš©μž 사이에 μŠ€ν…Œμ΄μ§€ 차이가 λ„ˆλ¬΄ 큰 것이 λ¬Έμ œμ˜€λ‹€.

 

이 문제λ₯Ό μ–΄λ–»κ²Œ ν• κΉŒ κ³ λ―Ό ν•œ κ·Έλ…€λŠ” λ™μ μœΌλ‘œ κ²Œμž„ μ‹œκ°„μ„ λŠ˜λ €μ„œ λ‚œμ΄λ„λ₯Ό μ‘°μ ˆν•˜κΈ°λ‘œ ν–ˆλ‹€.

μ—­μ‹œ 슈퍼 개발자라 λŒ€λΆ€λΆ„μ˜ λ‘œμ§μ€ μ‰½κ²Œ κ΅¬ν˜„ν–ˆμ§€λ§Œ, μ‹€νŒ¨μœ¨μ„ κ΅¬ν•˜λŠ” λΆ€λΆ„μ—μ„œ μœ„κΈ°μ— 빠지고 λ§μ•˜λ‹€.

였렐리λ₯Ό μœ„ν•΄ μ‹€νŒ¨μœ¨μ„ κ΅¬ν•˜λŠ” μ½”λ“œλ₯Ό μ™„μ„±ν•˜μ‹œμ˜€.

 

μ‹€νŒ¨μœ¨μ€ λ‹€μŒκ³Ό 같이 μ •μ˜ν•œλ‹€.

  - μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν–ˆμœΌλ‚˜ 아직 ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν•œ ν”Œλ ˆμ΄μ–΄μ˜ 수 / μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν•œ ν”Œλ ˆμ΄μ–΄ 수

 

전체 μŠ€ν…Œμ΄μ§€μ˜ 개수 N, κ²Œμž„μ„ μ΄μš©ν•˜λŠ” μ‚¬μš©μžκ°€ ν˜„μž¬ λ©ˆμΆ°μžˆλŠ” μŠ€ν…Œμ΄μ§€μ˜ λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ stagesκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, μ‹€νŒ¨μœ¨μ΄ 높은 μŠ€ν…Œμ΄μ§€λΆ€ν„° λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μŠ€ν…Œμ΄μ§€μ˜ λ²ˆν˜Έκ°€ 담겨 μžˆλŠ” 배열을 λ¦¬ν„΄ν•˜λ„λ‘ ν•¨μˆ˜λ₯Ό μ™„μ„±ν•˜μ„Έμš”.

 

- μŠ€ν…Œμ΄μ§€μ˜ 개수 N은 1 이상 500 μ΄ν•˜μ˜ μžμ—¬λ‹ˆμˆ˜μ΄λ‹€.

- stages의 κΈΈμ΄λŠ” 1 이상 200000μ΄ν•˜μ΄λ‹€.

- stagesμ—λŠ” 1 이상 N+1 μ΄ν•˜μ˜ μžμ—°μˆ˜κ°€ λ‹΄κ²¨μžˆλ‹€.
  - 각 μžμ—°μˆ˜λŠ” μ‚¬μš©μžκ°€ ν˜„μž¬ 도전 쀑인 μŠ€ν…Œμ΄μ§€μ˜ 번호λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.
  - 단, N+1은 λ§ˆμ§€λ§‰ μŠ€ν…Œμ΄μ§€(N번째 μŠ€ν…Œμ΄μ§€)κΉŒμ§€ 클리어 ν•œ μ‚¬μš©μžλ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

- λ§Œμ•½ μ‹€νŒ¨μœ¨μ΄ 같은 μŠ€ν…Œμ΄μ§€κ°€ μžˆλ‹€λ©΄ μž‘μ€ 번호의 μŠ€ν…Œμ΄μ§€κ°€ λ¨Όμ € μ˜€λ„λ‘ ν•˜λ©΄ λœλ‹€.

- μŠ€ν…Œμ΄μ§€μ— λ„λ‹¬ν•œ μœ μ €κ°€ μ—†λŠ” 경우 ν•΄λ‹Ή μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ 0으둜 μ •μ˜ν•œλ‹€.

 

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

N stages result
5 [2, 1, 2, 6, 2, 4, 3, 3] [3, 4, 2, 1, 5]
4 [4, 4, 4, 4, 4] [4, 1, 2, 3]

 

μž…μΆœλ ₯ 예 #1

1번 μŠ€ν…Œμ΄μ§€μ—λŠ” 총 8λͺ…μ˜ μ‚¬μš©μžκ°€ λ„μ „ν–ˆμœΌλ©°, 이쀑 1λͺ…μ˜ μ‚¬μš©μžκ°€ 아직 ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν–ˆλ‹€.
λ”°λΌμ„œ 1번 μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ 1/8 이닀.

2번 μŠ€ν…Œμ΄μ§€μ—λŠ” 총 7λͺ…μ˜ μ‚¬μš©μžκ°€ λ„μ „ν–ˆμœΌλ©°, 이 쀑 3λͺ…μ˜ μ‚¬μš©μžκ°€ 아직 ν΄λ¦¬μ–΄ν•˜μ§€ λͺ»ν–ˆλ‹€.
λ”°λΌμ„œ 2번 μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ 3/7

3번 μŠ€ν…Œμ΄μ§€ μ‹€νŒ¨μœ¨ 2/4

4번 μŠ€ν…Œμ΄μ§€ μ‹€νŒ¨μœ¨ 1/2

5번 μŠ€ν…Œμ΄μ§€ μ‹€νŒ¨μœ¨ 0/1

각 μŠ€ν…Œμ΄μ§€μ˜ 번호λ₯Ό μ‹€νŒ¨μœ¨μ˜ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜λ©΄ λœλ‹€.

 

μž…μΆœλ ₯ 예 #2

λͺ¨λ“  μ‚¬μš©μžκ°€ λ§ˆμ§€λ§‰ μŠ€ν…Œμ΄μ§€μ— μžˆμœΌλ―€λ‘œ 4번 μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ 1이며 λ‚˜λ¨Έμ§€ μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ€ 0이닀.

 

문제 ν’€κΈ°

 

이번 λ¬Έμ œλŠ” 문제λ₯Ό ν‘ΈλŠ” 것 보닀 문제λ₯Ό ν’€κΈ° μœ„ν•΄ μ΄ν•΄ν•˜λŠ” κ³Όμ •μ—μ„œ μ‹œκ°„μ΄ 쑰금 걸렸던 것 κ°™λ‹€.

 

좜λ ₯μ˜ˆμ‹œλ₯Ό ν† λŒ€λ‘œ 문제λ₯Ό ν•˜λ‚˜ν•˜λ‚˜ ν’€μ–΄λ‚˜κ°”λŠ”λ° 일단은 각 μŠ€ν…Œμ΄μ§€μ˜ μ‹€νŒ¨μœ¨μ„ κ΅¬λΆ„μ§€μ–΄μ„œ 정리해 λ†“μœΌλ©΄ 쒋을 것 같은 생각에 객체 objμ•ˆμ— λ”°λ‘œ ꡬ뢄될 수 μžˆλ„λ‘ λ„£μ–΄ μ£Όμ—ˆλ‹€.

 

그리고 objμ—μ„œ μ΅œμ’…μ μœΌλ‘œ μž‘μ„±λœ μ‹€νŒ¨μœ¨μ„ λ°°μ—΄μ•ˆμ— 리턴해주기 μœ„ν•΄μ„œ objμ•ˆμ— key값을 λ°°μ—΄μ•ˆμ— λ„£λ˜, value값을 κΈ°μ€€μœΌλ‘œ μ •λ ¬ν•˜λ„λ‘ μž‘μ„±ν•΄ μ£Όμ—ˆλ‹€.

 

객체 정렬은 μ΅μˆ™μΉ˜ μ•Šμ•„μ„œ μ—¬λŸ¬λ²ˆ μ‹œλ„ν•˜κΈ΄ ν–ˆμœΌλ‚˜ κ·Έλž˜λ„ μ„±κ³΅ν–ˆλ‹€ γ…Žγ…Žγ…Ž

 

κ·Έ 이후에 obj의 key값듀이 String ν˜•μ‹μ΄λΌμ„œ Number둜 μ „λΆ€ λ°”κΏ”μ£Όλ©΄ λ¬Έμ œκ°€ ν•΄κ²°λœλ‹€.

 

 

λ°˜μ‘ν˜•

λŒ“κΈ€