/* 이진수 더하기
* 이진수를 의미하는 두 개의 문자열 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 |