백준(Backjoon) 1373, 2진수 8진수

2021. 7. 20. 20:37CodingTest

문제풀이

입력받은 2진수 문자열에서 뒤쪽부터 3개씩 잘라서 그에 맞는 8진수로 변경하여 따로 누적시킨다. 그리고 최종적으로 누적한 문자열 변수를 거꾸로 변경하면 최종 8진수가 될 것이다. 주의할 점은 3개씩 잘라서 변환시키다가 숫자가 1개(1) 또는 2개(11) 남을 수 있다. 이 경우 앞자리에 0을 채워준다.

 

소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;


public class Main {
	private static Map<String, String> map = new HashMap<String, String>(){
		{
			put("000", "0");
			put("001", "1");
			put("010", "2");
			put("011", "3");
			put("100", "4");
			put("101", "5");
			put("110", "6");
			put("111", "7");
		}
	};

	public static String solution(String n)
	{
		StringBuilder answer = new StringBuilder();
	
		for(int i=n.length()-1;i>=0;i-=3)
		{
			if(i-2<0)
			{
				String temp = n.substring(0, i+1);
				while(temp.length()!=3)
				{
					temp = "0" + temp;
				}
				
				answer.append(map.get(temp));
			}
			else
			{
				answer.append(map.get(n.substring(i-2, i+1)));
			}
		}
		
		return answer.reverse().toString();
	}
	
	public static void main(String args[]) throws IOException
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		System.out.println(solution(br.readLine()));
		
	}
}