이 문제를 풀려면 2가지 필요
(1) 각 자리 수를 더하는 방법을 알아야 함
위 2가지 해결 방법
(1)-1.
-> 아스키 코드를 사용해 결국 해결 -> 각 숫자의 아스키 코드는 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);
}
}
(2)-1.
x%10하면 맨 마지막 자릿수를 알 수 있음.
첫 번째 시도:
로직은 일단 구현은 함
문제점:
근데 반복적으로가 안됨.
자기 다시 수로 돌아올 때까지 계속 해야하는데 그 while문을 구현하는데 까지 함
package till;
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
//1부터 9일때
//각 자리 수 더하고
String a=scan.nextLine(); //문자열로 받아서
int sum=0;
int count=0;
int total=0;
int input=0;
int result_l=0;
int result_r=0;
while(total==count){
for(int i=0;i<2;i++){
sum+=a.charAt(i)-'0';
}
//주어진 수의 오른쪽과 각 자리 수 더한 것의 오른쪽 값을 이어붙인다.
input=Integer.parseInt(a);
result_l=input%10;
result_r=sum%10;
total=result_l*10+result_r;
System.out.println("total은"+total);
//같은지 검사하며 count값 ++
count++;
}
//count 출력
System.out.println(count);
}
}
두 번째 시도:
첫 번째 반복은 미리 해주고, 두 번째 반복부터 while문으로 돌리니 해결!
그리고 각 자리 수 더하는 sum의 값이 이상했는데, 한 바퀴 돌때마다 다시 0으로 초기화를 안해줘서 그럼!
& 0부터 9(한 자리수) 도 카바 가능하게 코드 수정함
-> 0부터 9 예외 처리 안해줘 됨.
문제점:
답 제대로 나오는 줄 알았는데 for문에서 에러 남. 예를 들어 50의 각 자리 수를 더하면 index outofbound exception에러 남
&런타임 에러 남
package till;
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
//1부터 9일때
//각 자리 수 더하고
String a=scan.nextLine(); //문자열로 받아서
int sum=0;
int count=0;
int total=0;
int input=0;
int result_l=0;
int result_r=0;
String temp;
int temp2;
for(int i=0;i<2;i++){
sum+=a.charAt(i)-'0';
}
//주어진 수의 오른쪽과 각 자리 수 더한 것의 오른쪽 값을 이어붙인다.
input=Integer.parseInt(a);
result_l=input%10;
result_r=sum%10;
total=result_l*10+result_r;
//System.out.println("total은"+total);
while(input!=total){
sum=0;
//total을 가지고 다시 반복하며 검색
//각 자리수 더하기 위해 string형으로 바꾸어주기
temp=Integer.toString(total);
//System.out.println("한 바퀴 돈 결과"+temp);
for(int i=0;i<2;i++){
sum+=temp.charAt(i)-'0';
}
temp2=Integer.parseInt(temp);
//System.out.println("초기 값의 각 자리 수 합은: "+sum);
result_l=temp2%10;
result_r=sum%10;
total=result_l*10+result_r;
// System.out.println("total은"+total);
//같은지 검사하며 count값 ++
count++;
//count 출력
System.out.println(count);
}
}
}
세 번째 시도: 풀이 봄
문제점:
각 자리 수 더하기 (2가지 방법이 있음)
STRING형 일때
아스키 코드를 사용해 결국 해결 -> 각 숫자의 아스키 코드는 0 을 의미하는 48을 빼주면 자신의 수를 가지게 된다고 함.
INT형 일때
INPUT/10 + INPUT%10 해주면 됨..
괜히 .....복잡하게 형변환까지 해가며 이상하게 품..
첫 번째 반복도 미리 해둘 필요 x
더 쉽게 코딩 했으나 while문이 생각했던 대로 안 돌아감
계속 반복하며 돌아야 하는데 한바퀴만 돎
package till;
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int a=scan.nextInt();
int x=0,y=0;
int sum=0;
int count=0;
int result=0;
while(a!=result){
x=a/10;
y=a%10;
sum=x+y;
result=(y*10)+sum%10;
count++;
System.out.println(result);
a=result;
}
System.out.println(count);
}
}
네 번째 시도:
계속 맨 처음 input값으로 연산을 하니 반복이 안되지..
->input값을 한 바퀴 돌때마다 result값으로 바꾸어 주어야 함.
package till;
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int a=scan.nextInt();
int x=0,y=0;
int sum=0;
int count=0;
int result=a;
do{
x=result/10;
y=result%10;
sum=x+y;
result=(y*10)+sum%10;
count++;
///System.out.println(result);
}while(a!=result);
System.out.println(count);
}
}
'ALGORITHM > 푼 문제들&과정' 카테고리의 다른 글
해결 x, 기억 o 문제 list (0) | 2019.08.21 |
---|---|
[JAVA] 백준 8958번 (0) | 2019.03.09 |
[JAVA] 백준 1065번 (0) | 2019.03.03 |
[JAVA] 백준 4344번 (0) | 2019.02.27 |
[JAVA] 백준 4673번 (0) | 2019.02.26 |
Comments