백준 - 1212번 - 8진수 2진수

이상훈·2023년 4월 20일
0
post-custom-banner

1212번

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();

		String num = bf.readLine();
		String[] arr = {"000", "001", "010", "011", "100", "101", "110", "111"};

		for (int i = 0; i<num.length(); i++) {
			sb.append(arr[num.charAt(i)-'0']);
		}

		if (num.equals("0")) {
			System.out.println(num);
		} else {
			while (sb.charAt(0) == '0') {
				sb = new StringBuilder(sb.substring(1));
			}
			System.out.println(sb);
		}
	}
}

풀이


8진수를 2진수로 출력하는 문제다.

8진수를 2진수로든 2진수를 8진수로든 StringBuilder를 사용하는게 좋아보인다. 그리고 1의 자리부터 세개씩 끊어서 생각하는것이 key이다.

세자리 2진수가 나올 수 있는경우 8가지를 String 배열에 넣어줘 선언한다.

입력받은 문자열에서 charAt(i) - '0'로 접근해 int로 만들어서 배열 인덱스로 사용해준다. 그리고 stringBuilder에 쌓아준다.

나올수 있는 문자열이 8개이니까 그냥 선언하고 charAt은 int로 만들수있으니 인덱스로 접근한다는 생각이 소름이다...

입력받은 8진수가 0이면 자기자신을 출력하고

아니면 while문으로 기존에 선언한 StringBuilder에 chatAt(0)으로 접근해서 '0'이면 StringBuilder를 새로 선언하는데 sb.substring(1)를 사용해서 맨앞에 0만 빼고 만들어준다. 이걸 0이 안나올때까지 반복해주고 출력한다.

StringBuilder도 charAt으로 접근가능한지 몰랐다.
심지어 substring()도 된다. 그냥 문자열로 취급하나보다.

저걸 while문으로 돌리면서 0이 있으면 새로운 StringBuilder를 선언하는게 신선한 방법이였다.

sb.charAt(0) == '0' char과 int는 == 으로 비교하고 String은 .equals()로 비교하는것을 인지하자.

post-custom-banner

0개의 댓글