각 자리수의 합을 구하기
첫 시도:
왜케 배열에 쪼개어 저장하는 걸 좋아하는지 모르겠음.
문제점:
입력받은 정수형을 배열에 쪼개어 저장하는 방법? 메소드?가 있을까 찾아보다가 안나와서 아니 메소드만 찾으려하지 말고 뭔가 수학적인 방법이 있을 것 같아서 다시 생각해봄
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을 빼주면 자신의 수를 가지게 된다고 함. 참고
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