메이쁘

(JAVA) 백준 1373번 : 2진수 8진수 본문

Algorithm/Baekjoon

(JAVA) 백준 1373번 : 2진수 8진수

메이쁘 2020. 8. 29. 14:31

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

 

1373번: 2진수 8진수

첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.

www.acmicpc.net

 

 

안녕하세요.

 

문자열 문제로,

 

2진수 문자열을 8진수로 변환하는 문제다.

 

 

근데, 여기서 필자가 착각했던 점은 문제의 입력 조건이었다.

 

입력 조건을 보자면

 

 

"주어지는 수의 길이는 1,000,000 을 넘지 않는다."

 

즉, 문자열의 전체 길이가 999999 이다.

 

이를 10진수로 변환한다면, 최대 2^999999 의 값까지 가능하다는 것.

 

 

그렇기 때문에, 입력 조건을 생각하지 않고 2진수 -> 10진수 -> 8진수 하려하니 오류가 발생했었다.

 

int에 담을 수 없는 범위이기 때문에.

 

 

결국 처음에 틀렸고, 다른 방법을 고민하던 중

 

10진수로 거치지 않고 바로 8진수로 바꿔야한다고 느꼈다.

 

 

그럼, 어떻게 바꾸냐?

 

8은 2^3 이다.

 

즉, 8진수 1자리 = 2진수 3자리 로써, 서로 바꿔 출력이 가능하다는 것.

 

 

ex.

 

111(2) -> 7(8)

1101(2) -> 15(8)

 

여기서,

 

2진수 1101 : 001  //  101 

8진수 :          1     //    5

 

 

이해되었는가?

 

별도의 알고리즘은 크게 어렵지 않기 때문에 작성하지 않고,

 

위처럼 문제풀이 방법만 터득하면 된다.

 

 

결론

 

2진수 문자열의 맨 뒤에서부터 시작하여 3자리씩 끊어실제 값(10진수의 값) 을 임의의 문자 맨앞에 추가하여 누적된 결과 문자열

 

이 8진수로 변환한 값이다.

 

 

아 그리고 한 가지 주의할 점은

 

3으로 나누어 떨어지지 않을 때는 한 자리가 추가된다는 것.

 

1110011(2)  -> 163(8)  -  7자리

110011(2)   -> 63(8)  -  6자리

1011(2)       -> 15(8)  -  4자리

 

 

이상입니다.

 

감사합니다!

 

 

소스코드


 

Comments