[알고리즘]/백준

자바 - 구현 - 백준 2998 8진수

broship 2021. 3. 10. 10:36

문제


 

 

 

 

문제해결


import java.util.Scanner;

public class B2998 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String input = sc.next();
		//1. 2진수의 길이가 3으로 나누어 떨어질 때 까지 수의 앞에 0을 붙인다.
		if(input.length()%3==1)
			input = "00" + input;
		else if(input.length()%3==2)
			input = "0" + input;
		//2. 그 다음, 3자리씩 그룹을 나눈다.
		StringBuffer result = new StringBuffer();
		for(int i=0;i<input.length();i+=3) {
			String tmp = input.substring(i, i+3);
			//3. 아래의 표를 참고해 8진수로 바꾼다.
			switch (tmp) {
			case "000": result.append("0"); break;
			case "001": result.append("1"); break;
			case "010": result.append("2"); break;
			case "011": result.append("3"); break;
			case "100": result.append("4"); break;
			case "101": result.append("5"); break;
			case "110": result.append("6"); break;
			case "111": result.append("7"); break;
			}
		}
		System.out.println(result);
	}
}

1. 입력받은 문자열의 길이가 3으로 나눠서 1이 남으면 "00"을 붙이고, 2가 남으면 "0"을 붙힌다

2. i가 3씩 증가하는 for문을 이용해 문자열을 3개씩으로 자른다

3. 자른 문자열을 switch문을 이용하여 표와 비교후 결과값에 붙힌다

 

- 표를 사용하라는 말에 switch문을 사용했지만, 기본적인 2진수를 8진수로 바꾸는 방법으로도 풀이가 가능하다

import java.util.Scanner;

public class B2998_2 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String input = sc.next();
		//1. 2진수의 길이가 3으로 나누어 떨어질 때 까지 수의 앞에 0을 붙인다.
		if(input.length()%3==1)
			input = "00" + input;
		else if(input.length()%3==2)
			input = "0" + input;
		//2. 그 다음, 3자리씩 그룹을 나눈다.
		StringBuffer result = new StringBuffer();
		for(int i=0;i<input.length();i+=3) {
			String tmp = input.substring(i, i+3);
			//3. 아래의 표를 참고해 8진수로 바꾼다.
			int a = tmp.charAt(0)-'0';
			int b = tmp.charAt(1)-'0';
			int c = tmp.charAt(2)-'0';
			result.append(a*4+b*2+c*1);
		}
		System.out.println(result);
	}
}