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

[JAVA] 백준 1110번

by sjs_2215 2019. 3. 3.

문제

이 문제를 풀려면 2가지 필요

(1) 각 자리 수를 더하는 방법을 알아야 함

(2)수의 제일 오른쪽의 값을 뽑아낼 줄 알아야 함


위 2가지 해결 방법

(1)-1.

-> 아스키 코드를 사용해 결국 해결 -> 각 숫자의 아스키 코드는 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);
  }
}

(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

문제점:

각 자리 수 더하기 (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