본문 바로가기

프로그래머스/lv0

이진수 더하기

/* 이진수 더하기
 * 이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때,
 * 두 이진수의 합을 return
 *
 * bin1     bin2    result
 * "10"     "11"    "101"
 * "1001"   "1111"  "11000"
 */
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
public class programmer_0_54 {
    static String a1 = "1101"static String b1 = "111";    //10100
    static String a2 = "1001"static String b2 = "1111";
 
    //10진법으로 변경
    public int convert10(int n){
        int rst = 0;
        String[] ar1 = Integer.toString(n).split("");
 
        for(int i = 0; i < ar1.length; i++){
            int idx = ar1.length - 1 - i;
            int val = Integer.parseInt(ar1[i]);
 
            while(idx > 0){
                val *= 2;
                idx--;
            }
            rst += val;
        }
 
        return rst;
    }
    //2진법으로 변경
    public String convert2(int rst){
        String answer = "";
        int two = 0;
        while(1 == 1){  //2진법 변환
            two = rst % 2;
            rst = rst / 2;
            
            answer += Integer.toString(two);
            if(rst / 2 == 1){
                two = rst % 2;
                rst = rst / 2;
                answer += Integer.toString(two);
                answer += Integer.toString(rst);
                break;
            }
        }
        String rv = ""//역순
        for (int i = answer.length() - 1; i >= 0; i--) {
            rv = rv + answer.charAt(i);
        }
 
        return rv;
    }
 
    //2진법 선계산 후 올바른 2진법으로 변환
    public String getCal(int n){
        String rst = Integer.toString(n);
        String[] ar = rst.split("");    //1212
 
        int upr = 0;
        String tst = "";
        for(int i = ar.length-1; i >= 0; i--){
            int now = Integer.parseInt(ar[i]) + upr;
            
            if(i == ar.length-1)    tst += now % 2;
            else                    tst += now % 2;
            
            if((now / 2== 1)  upr = 1;    //자릿수 올림
            else    upr = 0;
        }
        
        String rv = ""//역순
        for (int i = tst.length() - 1; i >= 0; i--) {
            rv = rv + tst.charAt(i);
        }
 
        return "1" + rv;
    }
 
    public String solution(String bin1, String bin2) {
        String answer = "";
 
        //시간초과
        // int tst = (Integer.parseInt(bin1) + Integer.parseInt(bin2));
        // int rst = convert10(tst);    //10진법으로 계산
        // System.out.println("방법1 = " + convert2(rst));
 
        //런타임 에러
        // tst = (Integer.parseInt(bin1) + Integer.parseInt(bin2));
        // System.out.println("방법2 = " + getCal(tst));  //잘못된 2진법 > 2진법
 
        //다른사람 풀이..
        answer = Integer.toString(Integer.parseInt(bin1, 2+ Integer.parseInt(bin2, 2),2);
        return answer;
    }
 
    
    public static void main(String args[]){
        programmer_0_54 t = new programmer_0_54();
        System.out.println("---------------------------------------");
        System.out.println("result = " + t.solution(a1, b1));
        System.out.println("---------------------------------------");
        // System.out.println("result2 = " + t.solution(a2,b1));
        // System.out.println("---------------------------------------");
    }
}
cs

'프로그래머스 > lv0' 카테고리의 다른 글

짝수 홀수 개수  (0) 2022.12.05
배열 자르기  (0) 2022.12.05
치킨 쿠폰  (0) 2022.12.05
로그인 성공?  (0) 2022.12.05
등수 매기기  (1) 2022.12.05