[백준(baekjoon) 1373] 2진수 8진수
2018. 8. 21. 22:04ㆍAlgorithm
반응형
문제
입력되는 2진수를 8진수로 바꾸어라.
- 2진수의 길이는 1,000,000을 넘지 않는다.
해결
3개씩 묶어 8진수로 바꾸어주면 된다. (2진수 -> 10진수로 바꾸는 방법과 동일)
뒤에서 부터 묶기 때문에 앞에 부족한 부분을 어떻게 하느냐가 문제
나는 input을 char []
으로 받아 index
가 범위를 벗어날 때 아무처리도 하지 않았다.
주의
쉬운 문제지만 많이 틀렸다.
그 이유는
- 범위 문제
처음 문제를 잘못 이해해서 1,000,000이하의 수가 들어온다는 줄 알았다.
하지만 1,000,000자리이므로…. 숫자로 받으면 안된다. 범위를 훨씬 넘기기 때문
output역시long
을 넘어간다. 따라서 문자열로 처리해야한다. - 시간 문제
위의 문제를 파악하고 간단히String
으로 처리했지만, 당연히 시간초과
그 이유는String
은 새로운 객체를 생성하여 복사하는 방식으로 붙이기 때문이다.
그래서StringBuilder
를 쓰고자 했는데 나의 경우 뒤에서부터 작업을 하기 때문에
새로운 값 + 기존 값으로 붙여야해서append
가 무의미 했고,String
가 다를 것이 없었다.
그래서 고민 끝에char []
배열에 받아 끝에String
으로 출력하였다.
구현 java
1.import java.util.*;
2.
3.public class Main {
4. public static void main(String[] args) {
5. Scanner sc = new Scanner(System.in);
6. char[] inputs = sc.nextLine().toCharArray();
7.
8. int i = inputs.length - 1;
9. char[] outputs = new char[(inputs.length - 1) / 3 + 1];
10. int j = outputs.length - 1;
11. while (i > -1) {
12. int octal = 0;
13. for (int pb = 1; i >= 0 && pb < 8; pb *= 2) {
14. octal += pb * (inputs[i] - '0');
15. i--;
16. }
17. outputs[j--] = (char)(octal + 48);
18. }
19. System.out.println(String.valueOf(outputs));
20. }
21.}
결과
반응형