자바 내장함수를 쓰지 않고, 8진수의 숫자 하나당 2진수의 세자리로 나타낼 수 있으니 (ex. 4 -> 110) 이를 이용해보고자 했다.
세자리를 맞추기 위해 앞에 0을 붙여도 보고, 배열도 거꾸로 돌려보고 이것저것 다 했지만, 결국 가장 기본적인것을 간과했다 🥲
8진수 0을 2진수 0으로 변환할 때 0 -> 000 이지만, 내가 while문을 잘못 쓰는 바람에 while문 자체가 동작을 하지 않았ㄷr ... ㅎㅎ (10 -> 1000이 되어야 하는데 1이 나옴)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//Integer.toString(3);
String octalString = br.readLine();
String[] arr = {"000", "001", "010", "011", "100", "101", "110", "111"};
if(octalString.equals("0")){
System.out.println(0);
return ;
}
StringBuilder binaryString = new StringBuilder();
for(int i=0; i<octalString.length(); i++) {
int n = octalString.charAt(i) - '0' ;
String miniString = "";
miniString += arr[n];
// while(n != 0) {
// miniString += n%2;
// n /= 2;
// }
StringBuffer sb = new StringBuffer(miniString);
if(sb.length() == 1) binaryString.append("00" + sb.toString()); // ("00" + sb.reverse().toString());
else if(sb.length() == 2) binaryString.append("0" + sb.toString());
else binaryString.append(sb.toString());
//System.out.println(binaryString);
}
if (binaryString.charAt(0)=='0') binaryString.deleteCharAt(0);
if (binaryString.charAt(0)=='0') binaryString.deleteCharAt(0);
System.out.println(binaryString);
}
}
아주 부끄럽지만 다시는 이런 실수를 하지 않기 위해 남긴다.
내가 구현력이 부족하다는 것을 다시한번 느낀 문제.. ㅠ ㅠ