문제 : https://www.acmicpc.net/problem/2998

 

2998번: 8진수

창영이는 여러 가지 진법을 공부하고 있다. 창영이는 어제 2진법을 배웠고, 오늘은 8진법을 배웠다. 이제, 2진법 수를 8진법 수로 변환하려고 한다. 창영이가 사용한 방법은 다음과 같다. 2진수의

www.acmicpc.net

문제 요약 : 주어진 2진수를 8진수로 변환

입력 출력
2진수 문자열(100자리)  2진수를 8진수로 변환후 출력

 

JAVA

소스코드 : https://github.com/cbkpar/BOJ/blob/main/boj_2998.java

채점 번호 아이디 문제 번호 결과 메모리 시간 언어 코드 길이
16523009 cbkpar 2998 맞았습니다!! 14096KB 128ms Java 11 699B
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));
		StringBuilder sb = new StringBuilder();
		int sz,i,t;
		String str = br.readLine();
		sz = str.length();
		i = 0;
		if(sz%3==1) {
			i = 1;
			sb.append(str.charAt(0));
		}else if(sz%3==2) {
			i = 2;
			t = str.charAt(1)-'0';
			t += (str.charAt(0)-'0')*2;
			sb.append(t);
		}
		for(;i<sz;i+=3) {
			t = (str.charAt(i)-'0')*4;
			t += (str.charAt(i+1)-'0')*2;
			t += (str.charAt(i+2)-'0');
			sb.append(t);
		}
		System.out.println(sb);
	}
}

 

1. 입력된 2진수를 10진수로 변환후 8진수로 변환

Java 의 longlong 범위(2^64-1)를 초과하기 때문에 불가능

-> BigInteger 사용시 가능

 

2. 입력된 2진수를 뒤에서부터 3자리씩 끊음

stack을 이용하여 뒤에서 3자리씩 진수변환 시켜서 출력

-> 불필요한 stack사용 판단

 

3. 글자수 계산을해 3자리씩 끊음 (사용방법)

글자의 길이가 3의 배수보다 1 클경우 앞의 1자리수 미리 계산 후 출력

글자의 길이가 3의 배수보다 2 클경우 앞의 2자리수 미리 계산 후 출력

위 방법을 통해 모두 글자의 길이가 3의 배수가 되므로 3자리씩 끊어서 8진수로 변환 출력

 

+ Recent posts