일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 27866
- Eclipse
- 가격이 제일 비싼 식품의 정보 출력하기
- 프로그래머스
- 안드로이드 스튜디오
- 알고리즘
- M1
- MAC OS
- 깃허브
- 맥북
- 문자열 숫자 변환
- HashMap
- Java
- homebrew
- github
- 자바
- 프로그램서
- 백준
- 코딩테스트
- OAuth 인증
- SQL코딩테스트
- 핸드폰 가리기
- mysql
- sort정렬
- JDK
- 해시
- Iterator
- 포맷 지정자
- Android Studio
- 노선별 평균 역 사이 거리 조회하기
Archives
- Today
- Total
개발일지
[백준 JAVA] 1110번: 더하기 사이클 본문
728x90
#1110번: 더하기 사이클
문제
풀이
import java.util.Scanner;
public class Main_1110 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int a, b;
int Sum = 0;
int Sum1 = N; // copy 수
int n = N;
int num = 0; // 사이클 수
if ( n <= 9) {
a = 0;
b = n;
}
else {
a = n / 10;
b = (n % 10) / 1;
}
while (true) {
Sum = a + b;
n = Sum;
num++;
a = b;
b = (Sum % 10) / 1;
Sum1 = 10 * a + b;
if ( Sum1 == N) {
break;
}
}
in.close();
System.out.println(num);
}
}
- Sacnner로 수를 입력 받는다.
- 먼저 if문을 통해 9이하일 때와 10이상 일 때를 나누고 자리수를 분리한다.
- while문을 이용해 두 자리 수를 합하고 합할 때마다 사이클 수를 올린다.
- 그 후 다시 새로 만들어진 숫자를 가지고 다시 자리수를 나누고 이 숫자가 입력받은 수와 같을 시 while문을 종료시킨다.
* 반복문을 while문으로 사용해준 이유는 만족하는 값이 나올 때까지 반복문이 1번 이상 돌아가야 하기 때문이다.
내가 짠 코드보다 더 간단하게 짠 코드가 있을 것 같아 찾아보았다.
더보기
import java.util.Scanner;
public class Main_1110_T {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int num = 0;
int copy = N;
while(true) {
N = ((N % 10) * 10) + (((N / 10) + (N % 10)) % 10);
num++;
if (copy == N) {
break;
}
}
in.close();
System.out.println(num);
}
}
[1] (N % 10) * 10 // 기존 수의 일의 자리 수 = 새로운 수의 10의 자리수
[2] (((N / 10) + ( N % 10)) % 10)
1. N / 10 // 기존 수의 10의 자리 수
- 십의 자리가 0이면 0을 아니면 그 자리수를 그대로 반환한다.
2. N % 10 // 기존 수의 일의 자리수
3. (((N / 10) + ( N % 10)) % 10) //새로운 수의 일의 자리 수
- 1 + 2는 기존 수(N)의 십의 자리와 일의자리를 합해준 값이다.
- 합해준 값을 % 10을 해준다면 새로운 수의 일의 자리가 나온다.
[1] + [2]는 새로운 수이다.
- 새로운 수가 생성되면 사이클 수(num)의 숫자를 하나 올려준다.
- 그 후 입력받은 값(copy)과 새로 생성된 수를 비교해 두 수가 같을 시 반복문을 종료한다.
참고)
728x90
'Java > 알고리즘 공부' 카테고리의 다른 글
[백준 JAVA] 27866번: 문자와 문자열 / substring() (0) | 2023.03.14 |
---|---|
[백준 JAVA] 10807번: 개수 세기 / 10871번: X보다 작은 수 / 10818번: 최소, 최대 / 2562번: 최댓값 /5597번: 과제 안 내신 분...? (0) | 2023.01.31 |
[백준 JAVA] 10952번: A + B - 5 / 10951번: A + B - 4 (0) | 2023.01.30 |
[백준 JAVA] 2438번: 별 찍기 - 1 / 2439번: 별 찍기 - 2 (0) | 2023.01.30 |
[백준 JAVA] 15552번: A + B / #11021번: A + B - 7 /#11022번: A + B - 8 (0) | 2023.01.29 |
Comments