https://www.acmicpc.net/problem/1864
1864번: 문어 숫자
해류가 매우 느리고 바닥을 기어다니는 생물이 적은 바다 밑바닥에서만 발견되는 잔물결 무늬의 정체는 오랫동안 해양학자들에게 수수께끼였다. 하지만 최근의 연구 성과는 동물 언어학 분야
www.acmicpc.net

위 문제는 얼핏 보면 8진수 관련 명령어를 사용해야 할 것 같지만 전혀 그렇지 않은 문제이다.

[전체 코드]
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true) {
String Oct = sc.next(); //입력
if(Oct.equals("#")) { //#이 입력되면 반복문 종료
break;
}
int temp = 0, sum = 0;
int index = Oct.length()-1; //8의 제곱수를 관리할 인덱스(문자 길이 -1)
for(int i=0;i<Oct.length();i++) { //길이만큼 반복
switch(Oct.charAt(i)) { //i로 글자 하나하나 스위치로 대조
case '-': {
temp = 0; //temp가 대응하는 숫자이다.
sum += func(temp, index); //func 함수 호출
//각 자리마다 구한값은 sum에 더해서 넣는다.(곱해서 넣기 X)
index--; //case밖에 index를 할경우 break때문에 실행되지 않는다.
break; //하나의 케이스에 걸린경우 그 케이스 실행문을 실행하고 종료되어야 한다.
}
case '\\': {
temp = 1;
sum += func(temp, index);
index--;
break;
}
case '(': {
temp = 2;
sum += func(temp, index);
index--;
break;
}
case '@': {
temp = 3;
sum += func(temp, index);
index--;
break;
}
case '?': {
temp = 4;
sum += func(temp, index);
index--;
break;
}
case '>': {
temp = 5;
sum += func(temp, index);
index--;
break;
}
case '&': {
temp = 6;
sum += func(temp, index);
index--;
break;
}
case '%': {
temp = 7;
sum += func(temp, index);
index--;
break;
}
case '/': {
temp = -1;
sum += func(temp, index);
index--;
}
}
}
System.out.println(sum);
//for 문이 종료되면 출력
}
}
public static int func(int num, int i) {
//우리의 문어대응수와 8제곱수를 곱한 값을 구해줄 함수
//인수로 temp와 index를 넣어준다.
int result = 0; //결과값을 담을 result
if(i == 0) { //String의 마지막이나 문자길이가 1일 경우 곱해지는수는 없기때문에 그대로 반환해준다.
return num;
}
else {
// 8제곱 현재 index 곱하기 문어다리 대응수( temp )이다.
result = (int) (Math.pow(8, i) * num);
return result;
}
}
}
[제출 결과]

이번문제는 꽤 오래걸렸다. 사소한 실수들이 이상한 결과값을 불러왔다..
처음으로 Oct.equals("#") 과 Oct.equals('#') 이 다르다는 사실을 알았다. 자바에서는 따옴표를 확실히 구분하는것 같다. 이의 내용은 더 찾아보고 확실히 익힐 필요가 있다. 또 이번문제로 나동빈님 강의에서 못배운 switch를 배우게 되었다.
오랜만에 C배울때 주로 썼었던 Switch를 사용하려니까 실수를 많이 했는데 예를 들어서 각 케이스마다 break를 해주지 않거나 각각 break; 되어있는 case문 밖에 index-- 를 넣어서 index가 줄어들지 못했다는 실수를 했다. 또한 처음에 문제를 제대로 파악하지 못해서 제멋대로 풀었다ㅋㅋ (난독증인가,, ) 결국 구글링하면서 정신채리고 푸니까 또 이렇게 내게 정답을 하나 선물할 수 있게되서 너무 기분이 좋다.
'Programming > Algorithm(ACM Problems)' 카테고리의 다른 글
| [백준] 2386번 : 도비의 영어 공부 / [자바] JAVA / 학습기록 (0) | 2022.01.20 |
|---|---|
| [백준] 2355번 : 시그마 / [자바] JAVA / 학습기록 (0) | 2022.01.19 |
| [백준] 1731번 : 추론 / [자바] JAVA / 학습기록 (0) | 2022.01.16 |
| [백준] 1568번 : 새 / [자바] JAVA / 학습기록 (0) | 2022.01.16 |
| [백준] 1547번 : 공 / [자바] JAVA / 학습기록 (0) | 2022.01.16 |