Vibe.ai
Published 2023. 10. 20. 23:35
2089.-2μ§„μˆ˜ StudyingπŸ“‘
λ°˜μ‘ν˜•

문제

-2진법은 λΆ€ν˜Έ μ—†λŠ” 2μ§„μˆ˜λ‘œ ν‘œν˜„μ΄ λœλ‹€. 2μ§„λ²•μ—μ„œλŠ” 20, 21, 22, 23이 ν‘œν˜„ λ˜μ§€λ§Œ -2μ§„λ²•μ—μ„œλŠ” (-2)0 = 1, (-2)1 = -2, (-2)2 = 4, (-2)3 = -8을 ν‘œν˜„ν•œλ‹€. 10μ§„μˆ˜λ‘œ 1λΆ€ν„° ν‘œν˜„ν•˜μžλ©΄ 1, 110, 111, 100, 101, 11010, 11011, 11000, 11001 등이닀.

10μ§„λ²•μ˜ 수λ₯Ό μž…λ ₯ λ°›μ•„μ„œ -2μ§„μˆ˜λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

## μž…λ ₯

첫 쀄에 10μ§„λ²•μœΌλ‘œ ν‘œν˜„λœ 수 N이 μ£Όμ–΄μ§„λ‹€.

## 좜λ ₯

-2진법 수λ₯Ό 좜λ ₯ν•œλ‹€.

λ‚˜λ¨Έμ§€κ°€ 0λ˜λŠ” 1μ΄λ‚˜μ˜€κ²Œ ν•˜λŠ”κ²ƒμ΄ 핡심인 λ¬Έμ œμ΄λ‹€.

예둜 -13을 -2μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜λŠ” 경우λ₯Ό μ‚΄νŽ΄λ³΄λ©΄:

  • -13 / -2 = 6, λ‚˜λ¨Έμ§€ -1 (10μ§„μˆ˜λ‘œ -1, -2μ§„μˆ˜λ‘œ 1)
  • 6 / -2 = 3, λ‚˜λ¨Έμ§€ 0 (10μ§„μˆ˜λ‘œ 0, -2μ§„μˆ˜λ‘œ 0)
  • 3 / -2 = 1, λ‚˜λ¨Έμ§€ -1 (10μ§„μˆ˜λ‘œ -1, -2μ§„μˆ˜λ‘œ 1)
  • 1 / -2 = 0, λ‚˜λ¨Έμ§€ 1 (10μ§„μˆ˜λ‘œ 1, -2μ§„μˆ˜λ‘œ 1)
μ‹œκ°„ μ œν•œ λ©”λͺ¨λ¦¬ μ œν•œ 제좜 μ •λ‹΅ 맞힌 μ‚¬λžŒ μ •λ‹΅ λΉ„μœ¨
2 초 128 MB 10786 5034 4140 45.700%

https://www.acmicpc.net/problem/2089

풀이

μ–΄λŠμ •λ„ λ¬Έμ œλŠ” μ•Œκ² λŠ”λ°... κ΅¬ν˜„μ΄ μ•ˆλ˜μ„œ 인터넷을 μ°Ύμ•„λ³΄μ•˜λ‹€. 그리고 μ΄ν•΄ν•œκ²ƒμ„ λ°”νƒ•μœΌλ‘œ 정리해 λ³΄μ•˜λ‹€.

μ½”λ“œ


import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  

public class λ§ˆμ΄λ„ˆμŠ€2μ§„μˆ˜ {  
    public static void main(String[] args) throws IOException {  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        StringBuilder sb =new StringBuilder();  

        int n = Integer.parseInt(br.readLine());  

        if(n == 0){  
            System.out.println(0);  
        }else {  
            while (n != 0){  
                int remainder = n % -2;  
                n /= -2;  

                if(remainder < 0){ //λ‚˜λ¨Έμ§€κ°€ 0보닀 μž‘μœΌλ©΄  
                    remainder += 2; //λ‚˜λ¨Έμ§€ + 2                    n++; //λͺ« + 1                }  

                sb.insert(0,remainder);  
            }  

            System.out.println(sb);  
        }  

    }  
}

stack을 μ‚¬μš©ν•΄μ„œ ν‘ΈλŠ”κ²ƒλ„ κ°€λŠ₯할것같고...μ—¬κΈ°μ„œλŠ” StringBuilder.insert()λ₯Ό μ΄μš©ν•˜μ˜€λ‹€. while문을 λŒλ©΄μ„œ sb.insert(0,remainder); 0번 index에 remainderλ₯Ό λ„£μ–΄μ£ΌλŠ” 방식이닀.

λ°˜μ‘ν˜•
profile

Vibe.ai

@hai02y

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!