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

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

1373번

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 N = bf.readLine();

		if (N.length() % 3 == 1) {
			sb.append(N.charAt(0)-'0');
		}

		if (N.length() % 3 == 2) {
			sb.append((N.charAt(0) - '0') * 2 + (N.charAt(1) - '0'));
		}

		for (int i = N.length() % 3; i<N.length(); i+=3) {
			sb.append((N.charAt(i) - '0') * 4 + (N.charAt(i+1) - '0') * 2 + (N.charAt(i+2) - '0'));
		}

		System.out.println(sb);
	}
}

풀이


2진수를 입력받으면 8진수로 출력하는 문제이다.

이 경우 2진수를 1의자리부터 3자리씩 끊어서 연결해주면 8진수가 된다.

예를들어 11001100은 11 / 001 / 100 으로 분리시켜주고 각각 3 / 1 / 4를 연결해주면 314처럼 8진수 숫자가 된다.

문제의 핵심은 1의 자리부터 세자리씩 끊어서 숫자로 변환시켜주고 그걸 string으로 연결해줘야한다는 점이다.

처음에는 2진수를 String으로 받고 분리시켜 배열에 넣어주고 배열내부를 계산해서 저장하고 String처럼 더 해주려했는데 실패했다.

그래서 StringBuilder와 charAt을 사용해서 숫자로 변환하는 방법을 사용해서 문제를 푸는 방향으로 생각을했다.

(N.charAt(0) - '0')

여기서 N.charAt(0)이 숫자형 문자열일때 -'0'을 해주면 진짜 숫자가 나온다.

앞으로 숫자문자열을 int형으로 변환할 경우가 있으면 사용하기 좋아보인다.

post-custom-banner

0개의 댓글