일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 자바
- 1568번
- 24267번
- 1333번
- 10814번
- 10409번
- 25642번
- 14726번
- 14215번
- 2355번
- 오블완
- 5597번
- 14656번
- 7489번
- 25576번
- 14592번
- Java
- Baekjoon
- 20953번
- 14467번
- 21964
- 1362번
- 나무 공격
- 프로젝트 기획서
- 1141번
- 티스토리챌린지
- 25904번
- 백준
- 14322번
- 21866번
- Today
- Total
suheang
[백준] | JAVA, 자바 | 1864번 - 문어 숫자 본문
https://www.acmicpc.net/problem/1864
1864번: 문어 숫자
해류가 매우 느리고 바닥을 기어다니는 생물이 적은 바다 밑바닥에서만 발견되는 잔물결 무늬의 정체는 오랫동안 해양학자들에게 수수께끼였다. 하지만 최근의 연구 성과는 동물 언어학 분야
www.acmicpc.net
문제 요약 :
위에 사는 이들에게는 문어가 쓰는 숫자와 그를 표현하는 잔물결 무늬가 매우 낯설 수밖에 없다. 따라서 연구자들은 다음과 같은 기호로 잔물결 무늬를 적기로 합의했다. 각 기호와 대응하는 숫자는 다음과 같다.
- -는 0에 대응한다.
- \는 1에 대응한다.
- (는 2에 대응한다.
- @는 3에 대응한다.
- ?는 4에 대응한다.
- >는 5에 대응한다.
- &는 6에 대응한다.
- %는 7에 대응한다.
- /는 -1에 대응한다.
해양 신경학자들은 특히 음수를 나타내는 기호가 있다는 사실에 흥분하면서, 아직 걸음마 단계인 두족류 신경학이 이 발견을 계기로 크게 발전하기를 기대하고 있다.
당연히 문어의 수 체계는 8진법에 기반한다. 예를 들면 다음과 같다.
(@&는 2 × 82 + 3 × 8 + 6 = 158이다.
?/--는 4 × 83 + −1 × 82 + 0 × 8 + 0 = 1984이다.
/(\는 −1 × 82 + 2 × 8 + 1 = −47이다.
당신에게 주어진 문제는 문어 숫자를 입력 받아 십진수로 나타내는 것이다.
( 입력 받은 문어 숫자에 대응하는 십진수를 한 줄에 하나씩 출력 )
문제 풀이 :
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Map<String, Integer> octopus = new HashMap<>();
octopus.put("-", 0);
octopus.put("\\", 1);
octopus.put("(", 2);
octopus.put("@", 3);
octopus.put("?", 4);
octopus.put(">", 5);
octopus.put("&", 6);
octopus.put("%", 7);
octopus.put("/", -1);
while (true) {
String number = br.readLine();
if (number.equals("#")) break;
int total = 0;
for (int i = 0; i < number.length(); i++) {
String s = String.valueOf(number.charAt(i));
int octal = (int) Math.pow(8,number.length() - 1 - i);
if (octal == 0) octal = 1;
total += octopus.get(s) * octal;
}
System.out.println(total);
}
}
}
1. HashMap을 사용해 각 기호와 대응하는 숫자를 입력
2. while문을 통해 문어의 수 입력받기
3. 입력받은 문어의 수가 "#" 이라면 while문 종료
4. 10진수로 변환한 수를 저장할 변수 total 생성
5. 입력받은 문어의 수를 한 글자씩 가져와서 s에 저장
6. 8진법을 10진수로 전환할 수 있게 변수 octal에 값 저장
7. s와 octal를 곱하고 total에 합 계산
8. 계산된 total 출력
'알고리즘' 카테고리의 다른 글
[백준] | JAVA, 자바 | 2711번 - 오타맨 고창영 (0) | 2024.04.15 |
---|---|
[백준] | JAVA, 자바 | 2592번 - 대표값 (0) | 2024.04.15 |
[백준] | JAVA, 자바 | 1408번 - 24 (0) | 2024.04.14 |
[백준] | JAVA, 자바 | 1009번 - 분산처리 (0) | 2024.04.13 |
[백준] | JAVA, 자바 | 1212번 - 8진수 2진수 (0) | 2024.04.13 |