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

[Level 1] ν‚€νŒ¨λ“œ λˆ„λ₯΄κΈ°

by πŸ‡λ°•λ΄‰λ΄‰πŸ‡ 2021. 4. 7.

 

 

 

Algorithm

-  ν‚€νŒ¨λ“œ λˆ„λ₯΄κΈ° -

 


 

문제

슀마트폰 μ „ν™” ν‚€νŒ¨λ“œμ˜ 각 칸에 λ‹€μŒκ³Ό 같이 μˆ«μžλ“€μ΄ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€.

 

이 μ „ν™” ν‚€νŒ¨λ“œμ—μ„œ 왼손과 였λ₯Έμ†μ˜ μ—„μ§€μ†κ°€λ½λ§Œμ„ μ΄μš©ν•΄μ„œ 숫자만 μž…λ ₯ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

맨 처음 왼손 엄지손가락은 *ν‚€νŒ¨λ“œμ— 였λ₯Έμ† 엄지손가락은 #ν‚€νŒ¨λ“œ μœ„μΉ˜μ—μ„œ μ‹œμž‘ν•˜λ©°, 엄지손가락을 μ‚¬μš©ν•˜λŠ” κ·œμΉ™μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

 

1. 엄지손가락은 μƒν•˜μ’Œμš° 4가지 λ°©ν–₯으둜만 이동할 수 있으며 ν‚€νŒ¨λ“œ 이동 ν•œ 칸은 거리둜 1에 ν•΄λ‹Ήν•©λ‹ˆλ‹€.

2. μ™Όμͺ½ μ—΄μ˜ 3개의 숫자 1, 4, 7을 μž…λ ₯ν•  λ•Œμ—λŠ” 왼손 엄지손가락을 μ‚¬μš©ν•©λ‹ˆλ‹€.

3. 였λ₯Έμͺ½ μ—΄μ˜ 3개의 숫자 3, 6, 9λ₯Ό μž…λ ₯ν•  λ•ŒλŠ” 였λ₯Έμ† 엄지손가락을 μ‚¬μš©ν•©λ‹ˆλ‹€.

4. κ°€μš΄λ° μ—΄μ˜ 4개의 숫자 2, 5, 8, 0을 μž…λ ₯ν•  λ•ŒλŠ” 두 μ—„μ§€μ†κ°€λ½μ˜ ν˜„μž¬ ν‚€νŒ¨λ“œμ˜ μœ„μΉ˜μ—μ„œ 더 κ°€κΉŒμš΄ 엄지손가락을 μ‚¬μš©ν•©λ‹ˆλ‹€.
  4-1. λ§Œμ•½ 두 μ—„μ§€μ†κ°€λ½μ˜ 거리가 κ°™λ‹€λ©΄, 였λ₯Έμ†μž‘μ΄λŠ” 였λ₯Έμ† 엄지손가락, μ™Όμ†μž‘μ΄λŠ” 왼손 엄지손가락을 μ‚¬μš©ν•©λ‹ˆλ‹€.

 

μˆœμ„œλŒ€λ‘œ λˆ„λ₯Ό λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ numbers, μ™Όμ†μž‘μ΄μΈμ§€ 였λ₯Έμ†μž‘이인 지λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ¬Έμžμ—΄ handκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, 각 번호λ₯Ό λˆ„λ₯Έ 엄지손가락이 왼손인 지 였λ₯Έμ†μΈ 지λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ—°μ†λœ λ¬Έμžμ—΄ ν˜•νƒœλ‘œ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

 

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

numbers hand result
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL"
[7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR"

 

문제 ν’€κΈ°

 

μ™€μš°... μ—¬νƒœκΉŒμ§€ ν’€μ—ˆλ˜ λ¬Έμ œμ€‘μ—μ„œ κ°€μž₯ μ–΄λ €μš΄ 레벨1 λ¬Έμ œμ˜€λ‹€.

 

이번 λ¬Έμ œλŠ” ν‚€νŒ¨λ“œλ₯Ό 기반으둜 ν•œ λ¬Έμ œμ˜€λŠ”λ° μ™Όμͺ½μ— μžˆλŠ” [1, 4, 7]κ³Ό 였λ₯Έμͺ½μ— μžˆλŠ” [3, 6, 9]λ₯Ό result κ°’ μ•ˆμ— λ„£λŠ”κ²ƒμ€ λ„ˆλ¬΄λ‚˜ μˆ˜μ›”ν•œ μΌμ΄μ—ˆμ§€λ§Œ κ°€μš΄λ°μ— μžˆλŠ” [2, 5, 8, 0]에 λŒ€ν•œ 결과값을 λ„£λŠ” 것은 κ½€λ‚˜ μ–΄λ €μ› λ‹€.

(μ•„λ‹ˆ... μ•„μ£Ό 많이...γ…Žγ…Žγ…Ž)

 

일단 문제λ₯Ό ν’€μ–΄λ³΄λ©΄μ„œ λŠλ‚€κ±΄ λ‹€μ†Œ 반볡적인 행동을 ν•΄μ•Όν•˜λŠ” κ²½μš°κ°€ μžˆλŠ”λ° 이거λ₯Ό μ–΄λ–»κ²Œ ν•˜λŠλƒμ— λ”°λΌμ„œ λ…Έκ°€λ‹€κ°€ 많고 μ½”λ“œκ°€ λ”λŸ½λƒ, κΉ”λ”ν•˜κ³  μ‹œκ°„μ„ λ‹¨μΆ•μ‹œν‚€λŠλƒμ— λ‹¬λ €μžˆλŠ” 것 κ°™μ•˜λ‹€.

 

1. currIndex : keyPadλ₯Ό κΈ°μ€€μœΌλ‘œ ν•œ ν˜„μž¬ μœ„μΉ˜λ₯Ό νŒŒμ•…ν•΄ λ°°μ—΄λ‘œ λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜

2. findLen : 점과 점사이λ₯Ό κ΅¬ν•΄μ£ΌλŠ” ν•¨μˆ˜λ‘œ μ ˆλŒ€κ°’μ„ μ‚¬μš©ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— Math.absλ₯Ό μ‚¬μš©ν• λ•Œλ§ˆλ‹€ 무진μž₯ κΈΈμ–΄μ§€λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄μ„œ ν•¨μˆ˜ μ œμž‘

 

일단 λ‚΄κ°€ 문제λ₯Ό ν’€λ©΄μ„œ 반볡적으둜 진행해야할 것듀은 νŒŒμ•…ν•œ 뒀에 λ³€μˆ˜μ•ˆμ— ν•¨μˆ˜λ₯Ό λ„£μ–΄μ„œ λ³€μˆ˜μ•ˆμ— λ§€κ°œλ³€μˆ˜λ₯Ό λ„£μœΌλ©΄ κ·Έ ν•¨μˆ˜κ°€ λŒμ•„κ°ˆ 수 μžˆλ„λ‘ μž‘μ„±μ„ ν•΄μ£Όμ—ˆλ‹€.

 

그리고 문제λ₯Ό ν’€λ©΄μ„œ μƒˆλ‘­κ²Œ μ•Œκ²Œλœκ±΄ 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” 점과 μ μ‚¬μ΄μ˜ 거리λ₯Ό κ΅¬ν•˜λŠ” 곡식을 μ•Œκ³  μžˆμ–΄μ•Ό 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμ—ˆλ‹€λŠ” 것이닀!!!

 

점의 μœ„μΉ˜ : A(x1, y1), B(x2, y2)

점과 점 μ‚¬μ΄μ˜ 거리 : | x1 - x2 | + | y1 - y2 |

 

κ·Έλž˜μ„œ 머릿속 μ–΄λ”˜κ°€μ— μžˆλŠ” 곡식을 끄집어내지 λͺ»ν•΄μ„œ κ²°κ΅­ 인터넷 μ„œμΉ­μ„ ν†΅ν•΄μ„œ μ•Œκ²Œ λ˜μ—ˆλŠ”λ° λ‚˜μ€‘μ„ μœ„ν•΄μ„œλΌλ„ κΌ­ κΈ°μ–΅ν•΄μ•Ό κ² λ‹€ γ…Žγ…Žγ…Ž

 

 

λ°˜μ‘ν˜•

λŒ“κΈ€