-
[백준] 1110번 _더하기 사이클 (자바) BufferedReader 사용[ DEV ] Backend/[백준] 브론즈 마스터하기 2022. 7. 17. 20:57
https://www.acmicpc.net/problem/1110
1110번: 더하기 사이클
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음,
www.acmicpc.net
📝 리뷰
어려웠다.... 아직 do- while 문에 익숙하지 않은 내 자신에 현타가 왔다. 또, 십의자리 일의자리 나누는 방법을 나누기와 몫을 사용해서 구했던 적이 있으면서 까먹고 뻘짓한 나레기... 암튼간 다른 분들의 코드를 참고해서 맞출 수 있었다.
✏️ 알고리즘
1. 첫번째 입력된 숫자를 십의자리와 일의 자리로 분리해 준 후, 쪼갠 두 수 더하기!
십의 자리 분리는 : num/10
일의 자리 분리는 : num%10
int num2 = (num/10) + (num%10);
2. 문제에서 말한 "새로운 수" 구하기
처음 입력된 숫자의 일의자리가 "새로운 수"의 십의 자리로 가고,
num2 의 값에서의 일의자리 수가 "새로운 수"의 일의 자리로 간다.
int num3 = ((num%10)*10) + (((num/10) + (num%10))%10) ; //(num%10)*10을 통해 십의자리로 만들기!
3. while문에서 반복해야 되므로 while문 내부에 들어갈 수 있게 "변수 복사"를 해준다.
int N = num;
그래야 루프를 타고 돌면서 num값에 num3 변수의 알고리즘("새로운 수" 구하기 위한 식) 을 반복할 수 있다.
4.cycle 값을 구하기 위한 변수 설정 해주기!
int cycle = 0;
💻 BufferedReader를 이용한 풀이
위 언급된 알고리즘을 이용해서 만든 풀이.
(스스로 공부하기 위해서 다시 정리한 코드라 주석처리가 되어있습니다!)
import java.io.*; public class num1110 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int num = Integer.parseInt(br.readLine()); //int num2 = (num/10) + (num%10); //num2 변수를 이용해서 처음 주어진 숫자인 num의 자리수를 십의 자리와 일의 자리로 쪼개서 더해줌. //int num3 = ((num%10)*10) + (((num/10) + (num%10))%10) ; //num2에서 구한 num의 일의 자리 수에 10을 곱해서 십의자리로 만들어주고, //num의 십의자리와 일의자리를 각각 더해준 num2의 값의 일의 자리를 구해서 더해준다. int N = num; int cycle = 0; //사이클 값을 구하기 위한 설정. do { num = ((num%10)*10) + (((num/10) + (num%10))%10); //반복 루프를 만들기 위해 새로운 값인 num3 변수가 아닌 num 변수를 이용. cycle++; //루프가 돌때마다 1씩 더해주기 위한 설정. } while (N != num); //n과 num의 수가 다를때까지 반복하면 우리가 구하려는 사이클 수를 구할 수 있다. System.out.println(cycle); } }
개발자의 길 .. 쉽지 않아... 그래도 가보자고!
'[ DEV ] Backend > [백준] 브론즈 마스터하기' 카테고리의 다른 글
[백준] 8958번 _ OX 퀴즈 (자바_BufferedReader) (0) 2022.07.24 [백준] 4344번 평균은 넘겠지 (0) 2022.07.24 [백준] 15552번 _빠른 A+B (자바) (0) 2022.07.17 [백준] 2562번 최댓값 (0) 2022.07.17 [백준] 10818번 최소, 최대 (0) 2022.07.17