반응형
https://www.acmicpc.net/problem/1373
- 문제
- 문제 풀이
백준 1373번 2진수 8진수는 브론즈 1 난이도의 수학 및 문자열 문제이다. 이 문제에서는 2진수가 하나 주어지고 이 2진수를 8진수로 변환시키면 된다.
우선 2진수를 8진수로 변환할 때는 세 자리씩 나눠서 8진수로 변환하면 된다. 문제에서 주어진 예시로 예를 들어보겠다.
2진수 11001100을 8진수로 변환할 때 뒤에서 부터 세 자리씩 나누면 된다. 11, 001, 100로 세 자리씩 나눈 다음에 11은 3이 되고 001은 1이 되고 그리고 100은 4가 된다. 따라서, 이 2진수의 8진수는 314가 된다.
이 문제는 해쉬맵을 이용해서 풀었다. 우선 이 해쉬맵에 가능한 모든 2진수를 넣었다. 그리고 loop을 이용해서 세 자리씩 나눈 다음에 그 값을 맵을 이용 해서 구했다.
자세한 코드는 아래에 있는 코드를 참고하면 되겠다.
- 코드
import java.io.*;
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//해쉬맵 초기화
Map<String, Integer> map = new HashMap<>(){{
put("0", 0);
put("1",1);
put("00", 0);
put("01", 1);
put("10", 2);
put("11", 3);
put("001", 1);
put("010", 2);
put("011", 3);
put("100", 4);
put("101", 5);
put("110", 6);
put("111", 7);
put("000", 0);
}};
StringBuilder sb = new StringBuilder();
String s = br.readLine();
int n = s.length()-1;
while (n >= 3) {
String str = s.substring(n-2, n+1);
sb.append(map.get(str));
n-=3;
}
sb.append(map.get(s.substring(0, n+1)));
System.out.print(sb.reverse());
}
}
반응형
'백준' 카테고리의 다른 글
[백준] 1931번 : 회의실 배정 – JAVA [자바] (0) | 2023.04.25 |
---|---|
[백준] 15829번 : Hashing – JAVA [자바] (1) | 2023.03.12 |
[백준] 2338번 : 긴자리 계산 – JAVA [자바] (0) | 2023.02.27 |
[백준] 10820번 : 문자열 분석 – JAVA [자바] (0) | 2023.02.26 |
[백준] 10824번 : 네 수 – JAVA [자바] (0) | 2023.02.19 |
댓글