μ•Œκ³ λ¦¬μ¦˜/λ°±μ€€

[ λ°±μ€€ / BOJ 2729 ] μ΄μ§„μˆ˜ λ§μ…ˆ ( μžλ°” / JAVA )

KIMHYEYUN 2021. 10. 19. 23:28
λ°˜μ‘ν˜•

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

 

2729번: μ΄μ§„μˆ˜ λ§μ…ˆ

μ΄μ§„μˆ˜ λ§μ…ˆμ€ 맀우 κ°„λ‹¨ν•˜κ³ , μ‹­μ§„μˆ˜ λ§μ…ˆκ³Ό λΉ„μŠ·ν•˜κ²Œ ν•˜λ©΄ λœλ‹€. μ‹­μ§„μˆ˜ λ§μ…ˆμ„ ν•  λ•ŒλŠ”, 였λ₯Έμͺ½λΆ€ν„° μ™Όμͺ½μœΌλ‘œ μ°¨λ‘€λŒ€λ‘œ 숫자 ν•˜λ‚˜μ”© λ”ν•˜λ©΄ λœλ‹€. μ΄μ§„μˆ˜ λ§μ…ˆλ„ 이와 λΉ„μŠ·ν•˜κ²Œ ν•˜λ©΄ λœλ‹€. μ‹­

www.acmicpc.net

 

문제


μ΄μ§„μˆ˜ λ§μ…ˆμ€ 맀우 κ°„λ‹¨ν•˜κ³ , μ‹­μ§„μˆ˜ λ§μ…ˆκ³Ό λΉ„μŠ·ν•˜κ²Œ ν•˜λ©΄ λœλ‹€. μ‹­μ§„μˆ˜ λ§μ…ˆμ„ ν•  λ•ŒλŠ”, 였λ₯Έμͺ½λΆ€ν„° μ™Όμͺ½μœΌλ‘œ μ°¨λ‘€λŒ€λ‘œ 숫자 ν•˜λ‚˜μ”© λ”ν•˜λ©΄ λœλ‹€. μ΄μ§„μˆ˜ λ§μ…ˆλ„ 이와 λΉ„μŠ·ν•˜κ²Œ ν•˜λ©΄ λœλ‹€. μ‹­μ§„μˆ˜ λ§μ…ˆμ€ μ™Έμ›Œμ•Ό ν•  λ§μ…ˆμ΄ λ§Žμ§€λ§Œ, μ΄μ§„μˆ˜ λ§μ…ˆμ€ μ•„λž˜μ™€ 같이 5κ°€μ§€λ§Œ κΈ°μ–΅ν•˜λ©΄ λœλ‹€.

  • 0 + 0 = 0
  • 1 + 0 = 1
  • 0 + 1 = 1
  • 1 + 1 = 10
  • 1 + 1 + 1 = 11

두 μ΄μ§„μˆ˜κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, κ·Έ 합을 μ΄μ§„μˆ˜λ‘œ 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯


첫째 쀄에 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ˜ 수 T(1<=T<=1,000)κ°€ μ£Όμ–΄μ§„λ‹€. 각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” 숫자 2개둜 μ΄λ£¨μ–΄μ Έμžˆλ‹€. 이 μˆ«μžλŠ” 0κ³Ό 1둜만 이루어진 μ΄μ§„μˆ˜μ΄λ©°, κΈΈμ΄λŠ” μ΅œλŒ€ 80μžλ¦¬μ΄λ‹€. (λ§μ…ˆ κ²°κ³ΌλŠ” 81μžλ¦¬κ°€ 될 μˆ˜λ„ μžˆλ‹€) μ΄μ§„μˆ˜λŠ” 0으둜 μ‹œμž‘ν•  μˆ˜λ„ μžˆλ‹€.

좜λ ₯


각 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€μ— λŒ€ν•΄ μž…λ ₯으둜 μ£Όμ–΄μ§„ 두 μ΄μ§„μˆ˜μ˜ 합을 ꡬ해 μ΄μ§„μˆ˜λ‘œ 좜λ ₯ν•œλ‹€. 숫자의 μ•žμ— λΆˆν•„μš”ν•œ 0이 λΆ™μœΌλ©΄ μ•ˆ λœλ‹€.

풀이


μ²˜μŒμ— μ‰½κ²Œ 갈렀고,,,,,,, μ΄μ§„μˆ˜λ₯Ό μ‹­μ§„μˆ˜λ‘œ λ³€ν™˜ν•΄ λ”ν•˜κ³  λ‹€μ‹œ μ΄μ§„μˆ˜λ‘œ λ³€ν™˜ν•΄μ„œ 좜λ ₯ν–ˆλŠ”λ°μ—μ—μ—μ—μ—₯

빠밀🀦‍♀️ NUMBERFORMATEXCEPTION 

 

μ œν•œμ‚¬ν•­μ— μ΅œλŒ€ 80자리 (λ”ν•˜λ©΄ 81자리 κ°€λŠ₯)인데, long은 μ΅œλŒ€ 64bits.... μ ˆλŒ€ λΆˆκ°€ ‼️

κ·Έλž˜μ„œ λ¬Έμžμ—΄ μƒμœΌλ‘œ λ§μ…ˆμ„ μ§„ν–‰ν–ˆλ”°μ•„ ‼️

생각보닀 빨리 ν–ˆλŠ”λ° 계속 ν‹€λ¦Ό... μ™œμ— πŸ”₯

 

μ•Œκ³ λ³΄λ‹ˆ λ§ˆμ§€λ§‰ carryκ°€ 좜λ ₯μ•ˆλŒ..... κ·Έλž˜μ„œ 고쳐쀬닀 

근데 또 ν‹€λ¦Ό ... μ™œμ— πŸ”₯

 

000 000 같은 κ²½μš°κ°€ μ£Όμ–΄μ§€λ©΄ λ‚΄ μ½”λ“œλŠ” 000을 좜λ ₯ν–ˆλŠ”λ° .... 이걸 0만 좜λ ₯ν•˜κ²Œ ν•˜λ‹ˆκΉ ν†΅κ³Ό ‼️

이씨.... 그럼 좜λ ₯에 μ œν•œμ‚¬ν•­ μ μ–΄μ£Όλ˜κ°€μ•„μ•„μ•„β€ΌοΈ

κ·Έλž˜λ„ ν•΄κ²°ν•΄μ„œ λ‹€ν–‰ 휴~🀷‍♀️

μ½”λ“œ


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

public class Main_BOJ_2729_μ΄μ§„μˆ˜λ§μ…ˆ {
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb;
        StringTokenizer stringTokenizer;

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

        while(testCase-- > 0){
            sb = new StringBuilder();
            stringTokenizer = new StringTokenizer(br.readLine());
            String a = stringTokenizer.nextToken();
            String b = stringTokenizer.nextToken();

            

            int len = 0;
            int diff = 0;
            int carry = 0;
            int remain = 0;
            if(a.length() > b.length()){
                len = a.length();
                diff = a.length() - b.length();
                while(diff-- > 0){
                    b = '0'+ b;
                }
            }
            else if(b.length() > a.length()){
                len = b.length();
                diff = b.length() - a.length();
                while(diff-- > 0){
                    a = '0' + a;
                }
            }
            else
                len = a.length();

            for(int i = len-1; i >= 0 ; i--){
                int sum = (a.charAt(i) - 48) + (b.charAt(i) - 48) + carry;
                carry = sum / 2;
                remain = sum % 2;
                sb.append(remain);
                if(i == 0 && carry == 1)
                    sb.append(1);
                
            }

            char[] str = sb.reverse().toString().toCharArray();
            int idx = 0;
            for(int i = 0 ; i < str.length; i++){
                if(str[i] == '0'){
                    idx++;
                }
                else break;
            }

            if(idx == str.length)
                System.out.println(0);
            else{
                for(int i = idx; i < str.length ; i++)
                    System.out.print(str[i]);
                System.out.println();
            }

        }
    }
}

 

728x90
λ°˜μ‘ν˜•