관리 메뉴

Algo μ“°μž

[Programmers] 124 λ‚˜λΌμ˜ 숫자 λ³Έλ¬Έ

πŸ’― CodingTest/Programmers

[Programmers] 124 λ‚˜λΌμ˜ 숫자

S.Honey 2022. 6. 11. 18:51

β–Ά 문제 : https://programmers.co.kr/learn/courses/30/lessons/12899

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - 124 λ‚˜λΌμ˜ 숫자

 

programmers.co.kr

 

 

β–Ά μ½”λ“œ : 

function solution(n) {
    const nums = ['4', '1', '2'];
    let answer = '';
    
    
    while(n > 0){
        const remainder = n % 3;    
        if(remainder === 0){
            n = n/3 - 1;
        }else{
           n = Math.floor(n / 3); 
        }
        
        answer = nums[remainder] + answer;
    }
    return answer;
}

 

β–Ά 문제 풀이 : 

- λ¬Έμ œν’€μ΄κ°€ 생각보닀 쉽지 μ•Šμ•˜λ‹€. 특히 3μ§„μˆ˜μ˜ 경우 자릿수 증가에 μ˜ν•œ μ²˜λ¦¬κ°€ κ°€μž₯ 쉽지 μ•Šμ•„ λ§Žμ€ λΈ”λ‘œκ·Έλ“€μ„ μ°Έκ³ ν•˜μ—¬ 읽고 μ΄ν•΄ν–ˆλ‹€.

 

λ¨Όμ € 사진을 ν™•μΈν•΄λ³΄μž

μ•Œμ•„λ³Όμˆ˜λ§Œ 있으면 λ˜μ§€..γ…Ž

μœ„μ˜ μ˜ˆμ‹œμ—μ„œ μ™Όμͺ½μ€ 3μ§„μˆ˜λ‘œ ν‘œν˜„ν–ˆμ„λ•Œμ΄κ³ , 였λ₯Έμͺ½μ€ λ¬Έμ œν’€μ΄μ— μ‚¬μš©ν•œ 방식을 μž‘μ„±ν–ˆλ‹€.

1. 첫번째 μ˜ˆμ‹œμ—μ„œ 3μ§„μˆ˜μ˜ 경우 3으둜 λ‚˜λˆ„μ—ˆμ„λ•Œ λͺ«μ΄ 1, λ‚˜λ¨Έμ§€κ°€ 0이게 λœλ‹€. μ΄λ•Œ 3μ§„μˆ˜ μˆ«μžλŠ” '10'이 λœλ‹€. 이 경우 3으둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λ―€λ‘œ 맨끝 숫자λ₯Ό 0으둜 λ°”κΎΈκ³  μ•žμœΌλ‘œ 1을 λ„˜κ²¨ 3을 ν‘œν˜„ν•˜κ³  μžˆλ‹€. ν•˜μ§€λ§Œ 주어진 λ¬Έμ œμ—μ„œλŠ” 0이 μ•„λ‹Œ '4'둜 ν‘œν˜„ν•˜κ³  있으며, μ΄λ•Œ 자리올림이 λ°œμƒν•˜λ©΄ μ•ˆλœλ‹€. 이 방식에 μ°©μ•ˆν•˜μ—¬ λͺ«μ— 가지고 μžˆλŠ” 1을 λ‚˜λ¨Έμ§€μͺ½ 3으둜 λ„˜κ²¨μ€€ 방식이 였λ₯Έμͺ½ 방식이닀. 즉, λͺ«μ—μ„œ 1을 κ°ν•˜κ³  λ‚˜λ¨Έμ§€μ— 3을 더해쀀 방식이닀. μ΄λ ‡κ²Œ λ˜μ—ˆμ„ 경우 λ‚˜λ¨Έμ§€κ°€ 3μΌλ•ŒλŠ” '4'둜 ν‘œν˜„ν•΄μ£Όλ©΄ 쒌츑의 경우 3μ§„μˆ˜ ν‘œν˜„λ²•μ€ '10'μ΄μ§€λ§Œ, 우츑의 경우 124λ‚˜λΌμ˜ ν‘œν˜„λ°©μ‹λŒ€λ‘œ '4'둜 ν‘œν˜„ν•  수 μžˆλ‹€. λ‹€μŒ μ˜ˆμ‹œλ“€λ„ ν™•μΈν•΄λ³΄μž.  

 

2. λ‘λ²ˆμ§Έ μ˜ˆμ‹œμ—μ„œλŠ” 6을 3으둜 λ‚˜λˆ„μ–΄ 3μ§„μˆ˜ '20'으둜 ν‘œν˜„ν•˜κ³  μžˆλ‹€. ν•˜μ§€λ§Œ 이전과 λ§ˆμ°¬κ°€μ§€λ‘œ 0으둜 ν‘œν˜„μ„ ν•  경우 1μžλ¦¬κ°€ μ¦κ°€ν•΄μ„œ ν‘œν˜„μ΄ λœλ‹€. 즉, μ•žμ„  첫번째 μ˜ˆμ‹œμ™€ μžλ¦Ώμˆ˜λŠ” κ°™μ§€λ§Œ λ‘λ²ˆμ§Έ μ˜ˆμ‹œμ—μ„œμ˜ '20'은 이미 '10'μ—μ„œ μΌμ–΄λ‚œ 자릿수 증가λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλ‹€λŠ” 뜻이고, μ΄λŸ¬ν•œ 자릿수 증가λ₯Ό μ—†μ• κΈ° μœ„ν•΄ λͺ«μ—μ„œ 1을 κ°ν•˜κ³ , λ‚˜λ¨Έμ§€μ— 3을 μΆ”κ°€ν•΄ μœ„μ—μ„œ μž‘μ„±ν•œ ` 1 ... 3 `으둜 `λͺ« ... λ‚˜λ¨Έμ§€` κ°€ λ‚˜μ˜€κ²Œ 되고, 3을 4둜 ν‘œν˜„ν•˜λ©΄ 124λ‚˜λΌμ˜ ν‘œν˜„ λ°©μ‹μœΌλ‘œ 10μ§„μˆ˜ 6은 '14'둜 ν‘œν˜„ν•  수 μžˆλ‹€. 

 

(뒀에것듀도 λΉ„μŠ·ν•˜κ²Œ ν•΄λ³΄μž)

 

=> 뒀에 λ‚˜μ˜€λŠ” μ˜ˆμ œλ“€λ„ 해보면 μ•Œκ² μ§€λ§Œ 3μ§„μˆ˜μ—μ„œλŠ” 3으둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§ˆ λ•Œλ§ˆλ‹€ κ·Έ 자리λ₯Ό 0으둜 μ±„μš°κ³  ν•œμžλ¦Ώμˆ˜λ₯Ό μ¦κ°€μ‹œν‚΄μ„ νŒŒμ•…ν•  수 μžˆλ‹€. 즉, 3μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λŠ” κ³Όμ •μ—μ„œ 3으둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λŠ” κ²½μš°κ°€ λ‚˜μ˜¬λ•Œλ§ˆλ‹€ μžλ¦Ώμˆ˜κ°€ μ¦κ°€ν•œλ‹€λŠ” 말이고, 이λ₯Ό 막기 μœ„ν•΄μ„  λͺ«μ—μ„œ 1을 κ°ν•˜κ³  λ‚˜λ¨Έμ§€μ— 3을 μΆ”κ°€ν•œλ‹€λŠ” λ°©μ‹μœΌλ‘œ μƒκ°ν•΄μ•Όν•œλ‹€λŠ” 것이닀.(λ‚˜λ¨Έμ§€κ°€ 3인 것듀은 κ²°κ΅­ 124λ‚˜λΌμ˜ 방식에 μ˜ν•΄ 4둜 ν‘œν˜„λ  것이고 γ…‡γ…‡) 

 

λ”°λΌμ„œ 전체적인 λ™μž‘μ„ μ •μ˜ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

 

1. λ§€κ°œλ³€μˆ˜λ‘œ λ“€μ–΄μ˜¨ κ°’ n을 3으둜 λ‚˜λˆ„λŠ” μž‘μ—…μ„ λ°˜λ³΅ν•œλ‹€.

2. μ΄λ•Œ 3으둜 λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§ˆ λ•ŒλŠ” λ‚˜λˆˆ κ²°κ³Ό λͺ«μ—μ„œ 1을 λΉΌμ£Όκ³ , λ‚˜λ¨Έμ§€μ— 3을 μΆ”κ°€μ‹œν‚¨λ‹€.

  2 - 1. λ‚˜λ¨Έμ§€μ— 3을 μΆ”κ°€μ‹œν‚€λŠ” 과정은 κ²°κ΅­ ν•΄λ‹Ήν•˜λŠ” λ¬Έμžμ—΄ 뢀뢄을 4둜 μΉ˜ν™˜ν•˜λ©΄ λ˜λŠ” κ²ƒμ΄λ‹ˆκΉŒ μœ„μ˜ μ½”λ“œμ— λ‚˜μ™€ μžˆλŠ”λŒ€λ‘œ answer λ¬Έμžμ—΄μ— 뒷뢀뢄에 문자 '4' λ₯Ό μΆ”κ°€μ‹œμΌœμ€€λ‹€. 

  2 - 2. 3으둜 λ‚˜λˆ„μ–΄ 떨어지지 μ•ŠλŠ” κ²½μš°λŠ” 1 ν˜Ήμ€ 2λ₯Ό λ„£μ–΄μ£Όλ©΄ λ˜κ² μ§€? (124λ‚˜λΌμ˜ κ·œμΉ™λŒ€λ‘œ) 

3. 이 과정을 λ°˜λ³΅ν•˜λ©° λ§ˆμ§€λ§‰μ— n이 0 이되면 λ°˜λ³΅λ¬Έμ„ νƒˆμΆœν•˜λ„λ‘ while 의 μ œμ–΄λ¬Έμ„ n > 0 으둜 μž‘μ„±ν•΄μ€€λ‹€.