백준 1373번: 2진수 8진수 입력 조건 꼼꼼하게 진수 문제 다시 한번- java

byeol·2023년 1월 13일
0
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시간 이내에 풀었다.

profile
꾸준하게 Ready, Set, Go!

0개의 댓글