본문 바로가기
ALGORITHM/푼 문제들&과정

[JAVA] 백준 11720번

by sjs_2215 2019. 1. 30.

https://www.acmicpc.net/problem/11720

각 자리수의 합을 구하기

첫 시도:

왜케 배열에 쪼개어 저장하는 걸 좋아하는지 모르겠음.

문제점:

입력받은 정수형을 배열에 쪼개어 저장하는 방법? 메소드?가 있을까 찾아보다가 안나와서 아니 메소드만 찾으려하지 말고 뭔가 수학적인 방법이 있을 것 같아서 다시 생각해봄

package till;
import java.util.*;

public class Main {
   public static void main(String[] args) {
       Scanner scan=new Scanner(System.in);
       
       int x=scan.nextInt();
       
       int a=scan.nextInt();
       //배열에 쪼개어 저장
       
       //첫번째 input만큼 for문 돌려 배열 안 값 모두 저장
       for(int i=0;i<x;i++){
     
      }
     
  }
}


두 번째 시도: (while문 ver.)

x%10하면 맨 마지막 숫자를 알 수 있구나

하..1학년때부터 좀 알고 풀지 그랬어..

import java.util.*;

public class Main {
   public static void main(String[] args) {
       Scanner scan=new Scanner(System.in);
       
       int x=scan.nextInt();
       int a=scan.nextInt();
       int sum=0;
       
       //1. a%10 한 것을 sum에 저장. (맨 뒷 숫자가 sum에 저장됨)
       //2. a를 10으로 나누어 몫을 새롭게 x에 저장
       //루프 빠지는 조건은 x를 --해나가며 0될 때 빠져나옴
       //3. 반복
       
       while(x!=0){
      sum+=a%10;
      a=a/10;
      x--;
      }
      System.out.println(sum);
     
  }
}


세 번째 시도: (for문 ver.)

문제점:

while문이고 for문이고 계속 런타임 에러 남

해결책:

두 번째 줄에 주어지는 수가 int범위를 넘어갈 수 있기 때문에 nextInt 메서드가 exception을 던지기 때문임을 알게 됨.

파이썬이 아닌 이상 정수로 입력을 받아서는 풀 수 없습니다. 아무리 큰 자료형을 쓰더라도 100자리의 수는 범위를 초과하기 때문입니다.

->문자열로 받아야함

->nextInt()말고 nextLine() 으로

import java.util.*;

public class Main {
   public static void main(String[] args) {
       Scanner scan=new Scanner(System.in);
       
       int x=scan.nextInt();
       int a=scan.nextInt();
       int sum=0;
       
       //1. a%10 한 것을 sum에 저장. (맨 뒷 숫자가 sum에 저장됨)
       //2. a를 10으로 나누어 몫을 새롭게 x에 저장
       //루프 빠지는 조건은 x를 --해나가며 0될 때 빠져나옴
       //3. 반복
       
       for(int i=0;i<x;i++){
      sum+=a%10;
      a=a/10;
      }
     
      System.out.println(sum);
     
  }
}


네 번째 시도:

그래서 문자열로 받아서 배열에 저장한다음 문자열들을 정수로 바꿔야 하는데 에러남.

import java.util.*;

public class Main {
   public static void main(String[] args) {
       Scanner scan=new Scanner(System.in);
       
       int x=scan.nextInt();
       String a=scan.nextLine(); //문자열로 받아서  
       String[] number; int sum=0,temp=0; String b="";
       
       //number 배열에 한글자씩 저장
       number=a.split("");
       
       for(int i=0;i<x;i++){
      b=number[i]; //이렇게 하면 안되는 듯
      temp=Integer.parseInt(b); //이렇게 하면 안되는 듯22
      sum+=temp;
      }
       
      System.out.println(sum);
  }
}


다섯 번째 시도:(결국 답 봄)

아스키 코드 사용하는 거래. 그렇구나. 맞아 난 컴퓨터 기초 d맞았었지.

정리하자면)

두 번째 입력을 int형으로 받아 배열에 저장하려 함

-> 수학적인 방법을 찾음 -> int형으로 받아서 %연산자와 /연산자를 이용해 답 구하는데 성공. (eclipse에서 돌아갔음)

-> 백준에선 런타임 에러 발생 -> 검색해보니 두번 째 입력이 범위가 크기에 정수형으로는 python아닌 인상 안받아진다 함

-> 문자열로 받아 해결해보기로 함 -> 숫자 더하는 부분이 영 안됨

-> 아스키 코드를 사용해 결국 해결 -> 각 숫자의 아스키 코드는 0 을 의미하는 48을 빼주면 자신의 수를 가지게 된다고 함. 참고

& 그리고 charAt 사용법도 여기 참고

import java.util.*;

public class Main {
   public static void main(String[] args) {
       Scanner scan=new Scanner(System.in);
       
       int x=scan.nextInt();
       String a=scan.nextLine(); //문자열로 받아서  
       int sum=0;
       
       
       for(int i=0;i<x;i++){
      sum+=a.charAt(i)-'0';
      }
       
      System.out.println(sum);
  }
}


근데 nextLine()하면 런타임 에러고 next()하면 맞음

->>>>???????????????

'ALGORITHM > 푼 문제들&과정' 카테고리의 다른 글

[JAVA] 백준 1065번  (0) 2019.03.03
[JAVA] 백준 4344번  (0) 2019.02.27
[JAVA] 백준 4673번  (0) 2019.02.26
[JAVA] 백준 10817번  (0) 2019.02.01
[JAVA] 백준 1924번  (0) 2019.01.31

Comments