문제 : 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진수로 변환 출력
'백준온라인' 카테고리의 다른 글
[백준온라인] 2847번 게임을 만든 동준이 (0) | 2021.07.03 |
---|---|
[백준온라인] 2703번 Cryptoquote (0) | 2021.07.03 |
[백준온라인] 10384번 팬그램 (0) | 2021.07.03 |
[백준온라인] 17825번 주사위 윷놀이 (0) | 2019.12.22 |
[백준온라인] 1697번 숨바꼭질 (0) | 2019.12.20 |