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


문제

8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하시오.


입력

첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.


출력

첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다.


코드


👩‍💻 풀이과정

  • 8진수 수를 String 타입의 num으로 입력받음
  • 2진수 세 자리로 나올 수 있는 경우를 0~7의 순서로 binary 배열에 저장해놓음
  • 입력받은 8진수를 앞 자리부터 하나씩 꺼내어 처리
    • 첫번째 자리의 숫자가 4 미만일 경우에는 2진수로 바꿨을 때 앞자리에 0이 생김
      • 0, 1인 경우에는 2진수로 바꿨을 때 000, 001이기 때문에 0을 2개 없앰
      • 2, 3인 경우에는 2진수로 바꿨을 때 010, 011이기 때문에 0을 1개 없앰
    • 나머지의 경우에는 각 자리수에 맞게 2진수로 변환하여 sb 배열에 저장


👀 주의할 점

  • 주어진 수의 범위가 아닌, 길이가 333,334를 넘지 않는다는 것 주의!
    • 숫자형 타입으로는 표현할 수 없음 -> 바로 처리해야 함
  • 8진수 한 자리는 2진수 세 자리로 표현된다는 것!
  • 맨 앞자리가 0이 되면 안됨 -> 자리수에 따라 0 잘라줌
  • StringBuilder
    • String은 불변 객체로, 한 번 생성되면 변경할 수 없음
      • 문자열을 변경하면 객체가 변경되는 것이 아니라 새로운 객체가 생성됨 -> 성능 저하
    • StringBuilder는 변경 가능한 객체
    • 새로운 객체 생성이 아니라, 기존의 데이터에 더하는 방식 -> 속도가 빠름
    • .append(str)로 문자열 추가
    • .insert(index, str)로 원하는 위치에 문자열 추가