백준 1110 - java ) 더하기 사이클 (*)

2021. 8. 24. 18:46코딩/Python

내 사고과정 

이런 느낌인건가.. Scanner 클래스를 이용하여 사용자로부터 정수 2개를 입력받고

두번째로 입력한 정수와 + 덧셈 결과에서 일의 자리만 붙여 새로운 더하기 수를 만들자...인가? 

새롭게 더해서 만들어진 수는 문자열로 처리를 해야 할 것 같았다. 

 

내 실행코드 

import java.util.Scanner; 

public class Test {
	public static void main(String[] args) {
	
	Scanner sc = new Scanner(System.in);
	
	while(sc.hasNextInt()) { // hasNext()도 상관 없음. 정수를 입력받고자 했으니 nextInt()가 더 가독성 좋음. 
			
		int a = sc.nextInt();
		int b = sc.nextInt();
		int c=0; // 덧셈 결과값 
		System.out.println(b+c);
	}
	sc.close();
	  }
	}

내 실행결과 

2 6
6

왜 두번째 숫자만 나오는 걸까... 

 


수정된 코드

import java.util.Scanner; 

public class Test {
	public static void main(String[] args) {
	
	Scanner sc = new Scanner(System.in);
	
	int n = sc.nextInt();
	if(n<10) {
		n*=10; // 입력한 수가 10 미만이면 n에 10을 곱해준다.
	}
	int left,right,cnt=0, sum=n; // left,right 두 자리 수를 각각 더해야 하므로 변수 선언 + 몇 사이클을 도는지 cnt 변수 선언 + 새로운 수 비교 위해 sum 선언 + 초기값 n 
	
	while(true) { // while문을 true로 반복시킨다. 
		left=sum/10; // left가 두 자리수 중 첫번째. 즉 10의 자리수이므로 10으로 나누고 몫을 전달
		right=sum%10; // right는 1의 자리 수 이므로 10으로 나눴을 때 나머지를 전달
		sum=left+right; // sum에 left와 right를 더한다. 
		
		sum=right*10+sum%10; //2+6=8와 같은 새로운 수는 right를 10의 자리 수로, 8은 일의 자리 수로 만드므로 right에 10을 곱하고 sum에 10으로 나누고 나머지 수를 더한다.
		cnt++; // 한 사이클 돌고 cnt값을 올려준다. 
		if(sum==n) break; // 사이클을 끝내고 새로운 수 값이 입력한 값과 같으면 break문으로 while문 탈출 
	}
	System.out.println(cnt); // while문이 끝나고 cnt 출력 
	  }
	}

수정된 실행결과 

55
3

 

생각보다 어려운 문제였다.. 내가 처음에 생각했던 사고과정이랑 많이 달랐던 것 같다.