https://www.acmicpc.net/problem/1373
코드 :
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));
String binaryNum = br.readLine();
//3으로 나누어떨어지면 8진수 길이는 length/3 그렇지 않으면 length/3+1
int octalLength = binaryNum.length() % 3 == 0 ? binaryNum.length()/3 : binaryNum.length()/3+1;
int[] arr = new int[octalLength];
//인덱스를 뒤에서 부터 세는 수작질
int index = octalLength-1;
for (int i = binaryNum.length()-1; i >= 0; i--) {
// '0'의 아스키코드 값 빼서 1또는 0 나오도록 만듦
int chVal = binaryNum.charAt(i) - '0';
if((binaryNum.length()-i-1) % 3 ==0){
arr[index] += chVal * 1;
}
if((binaryNum.length()-i-1) % 3 == 1){
arr[index] += chVal * 2;
}
if((binaryNum.length()-i-1) % 3 == 2){
arr[index--] += chVal * 4;
}
}
StringBuilder sb = new StringBuilder();
for(int num : arr){
sb.append(num);
}
System.out.println(sb);
}
}
뭔가 앞만보고 짠 코드 같다. 주어진 수의 길이가 1,000,000까지 이기때문에, 숫자형으로 했다가는 범위가 넘치기에 문자열로 처리해야 한다. 그래서 분류도 문자열인 것 같다.
2진수를 3자리 단위로 끊어서 합을 구하고, 8진수의 각 자리수에 넣으면 된다.
'알고리즘 > 백준' 카테고리의 다른 글
백준 11005번 - 진법 변환 2(Java 8) (0) | 2022.03.18 |
---|---|
백준 1212번 - 8진수 2진수 (Java 8) (0) | 2022.03.17 |
백준 17087번 - 숨바꼭질 6 (Java 8) (0) | 2022.03.16 |
백준 9613번 - GCD합 (Java 8) (0) | 2022.03.16 |
백준 2004번 - 조합 0의 개수 (Java 8) (0) | 2022.03.15 |
댓글