import java.util.*;
import java.io.*;
class Main{
public static int solution(String input){
int result =0,sum=0;
int mul =1;
for(int i=input.length()-1;i>=0;i--) {
sum+=(input.charAt(i)-'0')*mul;
mul*=2;
}
mul=1;
while(true) {
int rem =sum%8;
sum/=8;
result+=rem*mul;
mul*=10;
if(sum<8) {
result+=sum*mul;
break;
}
}
return result;
}
public static void main(String[] args) throws IOException{
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
System.out.println(solution(input));
}
}
예시로 나온 답만 맞게 나오고 문제를 채점하면 틀렸다고 나온다.
다시 보니 문제의 조건에 부합하지 않게 풀었다.
입력 :첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다.
2의 1000승이 저 결과인데 저 풀이대로 이진수->십진수로 바꾸는 과정에서 int자료형 sum에 표현이 가능할까?
불가능하다.
int는 고작해봐야 10자리이기 때문에 절대 담을 수 없다.
따라서
기존 이진수-> 십진수-> 팔진수의 과정에서
개선 이진수-> 팔진수로 바꾸자!!!
import java.util.*;
import java.io.*;
class Main{
public static StringBuilder solution(String input){
int sum=0;
int mul =1;
int turn=1;
StringBuilder result=new StringBuilder();
for(int i=input.length()-1;i>=0;i--) {
sum+=(input.charAt(i)-'0')*mul;
mul*=2;
turn++;
if(turn==4||i==0) {
turn =1;
result.append(sum);
sum=0;
mul=1;
}
}
return result.reverse();
}
public static void main(String[] args) throws IOException{
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
System.out.println(solution(input));
}
}
아슬아슬하게 1시간 이내에 풀었다.