Hennie
[백준] 1110번 : 더하기 사이클 (JAVA) 본문
QUESTION
1110번: 더하기 사이클
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,
www.acmicpc.net
ANSWER
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main0 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String a = br.readLine(); // 입력 받은 수 => 고정!
String temp = a; // 비교 할 수! (처음엔 입력 받은 수)
String second = "1";
int b = 0;
int count = 0; // 몇 번 반복했는지 저장할 변수
while(true) {
// 비교할 수가 한자리 수이고 이미 앞에 0이 붙어있지 않을 때!
if(Integer.parseInt(temp) < 10 && Integer.parseInt(second) != 0) {
temp = 0 + temp; // 앞에 0을 붙여 두 자리 수로 만들기
}
String first = temp.substring(0,1); // 첫번째 자리
second = temp.substring(1,2); // 두번째 자리
b = Integer.parseInt(first) + Integer.parseInt(second);
temp = second + b%10;
count++;
// 입력 받은 수와 계산 한 수가 같아지면 반복문 나가기
if(Integer.parseInt(a) == Integer.parseInt(temp)) break;
}
sb.append(count);
System.out.println(sb);
}
}
RESULT
MEMO
조금 어렵게 느껴질 수도 있는 문제지만 아래 사고 회로대로 코딩하면 쉽게 풀 수 있다!
1) 처음 입력받은 정수를 문자열로 생각한다
2) 입력받은 정수의 십의 자리 수와 일의 자리 수를 각각 first, second 변수로 저장한다
(이 때, 입력받은 수가 10보다 작으면 앞에 0을 붙여줄 것!)
temp = 0 + temp; // 숫자 + 문자 = 문자
3) 십의 자리 수와 일의 자리 수를 더한 값을 b 변수에 저장한다
4) 처음 입력받은 정수의 일의 자리수가 새로운 수의 10의 자리수가 되고 b의 일의 자리 수가 새로운 수의 일의 자리 수가 된다
temp = second + b%10; // 문자 + 숫자 = 문자
// 연산자 우선순위에 의해 나머지 연산이 먼저 이뤄지므로 괄호 씌워주지 않아도 괜찮!
temp = second + (b%10);
5) 연산 횟수를 count 변수에 저장한다
6) 처음 입력받은 a와 temp가 같아질 때까지 반복한다
여기까지 풀고 브론즈 3이 되었다!
'BaekJoon > 04. while문' 카테고리의 다른 글
[백준] 10951번 : A+B - 4 (JAVA) (0) | 2021.04.15 |
---|---|
[백준] 10952번 : A+B - 5 (JAVA) (0) | 2021.04.15 |