- Today
- Yesterday
- Total
메이쁘
(JAVA) 백준 1373번 : 2진수 8진수 본문
https://www.acmicpc.net/problem/1373
안녕하세요.
문자열 문제로,
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자리
이상입니다.
감사합니다!
소스코드
'Algorithm > Baekjoon' 카테고리의 다른 글
(JAVA) 백준 1699번 : 제곱수의 합 (1) | 2020.08.30 |
---|---|
(JAVA) 백준 1212번 : 8진수 2진수 (0) | 2020.08.29 |
(JAVA) 백준 9012번 : 괄호 (0) | 2020.08.26 |
(JAVA) 백준 10988번 : 팰린드롬인지 확인하기 (0) | 2020.08.26 |
(JAVA) 백준 1159번 : 농구 경기 (0) | 2020.08.26 |