티스토리 뷰
https://www.acmicpc.net/problem/1110
문제
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다. 다음 예를 보자.
26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다.
N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. N은 0보다 크거나 같고, 99보다 작거나 같은 정수이다.
출력
첫째 줄에 N의 사이클 길이를 출력한다.
풀이
N이 10보다 작을 때 처리만 잘 해주면 쉽게 풀 수 있는 문제입니다. 처음 문제를 보면 N이 10보다 작을 때 어떻게 하라는건가 싶은데 주어진 수가 한자리 숫자일 땐 문제에서 주어진 연산을 할 수 없기 때문에
N = 2일 때, 0 + 2 = 2 형태로 새로운 숫자에 사용할 오른쪽 숫자를 구한 다음 여기에 주어진 N의 오른쪽 숫자인 2를 이어 붙여 22로 만들어서 연산하시면 됩니다.
즉 N < 10 일 땐 새로운 수 = N * 10 + N 이 되는 것입니다. 이렇게 구한 두자리 숫자를 가지고 문제에서 주어진 연산을 수행하면 됩니다.
코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int N = s.nextInt();
int newNum = N;
int answer = 0;
do
{
if (10 > newNum)
{
newNum = newNum * 10 + newNum;
answer++;
}
else
{
int first = newNum / 10; // 앞자리
int second = newNum % 10; // 뒷자리
int tmp = first + second; // 앞자리와 뒷자리를 더해서 새로 만들어진 수
int secondOfNewNum = newNum % 10; // 현재 새로운 숫자의 뒷자리
// 새로운 숫자 갱신
newNum = (secondOfNewNum * 10) + (tmp % 10);
answer++;
}
}
while (newNum != N);
System.out.println(answer);
}
}
'알고리즘 문제 풀이' 카테고리의 다른 글
[JAVA] 백준 2588번 곱셈 풀이 (0) | 2021.12.31 |
---|---|
[C++] 프로그래머스 순위 풀이(플로이드-워셜 알고리즘) (0) | 2021.10.19 |
[C++] 프로그래머스 게임 맵 최단거리 풀이 (0) | 2021.10.19 |
[C++] 프로그래머스 신규 아이디 추천 풀이 (0) | 2021.10.17 |
[C++] 프로그래머스 로또의 최고 순위와 최저 순위 풀이 (0) | 2021.10.17 |
- Total
- Today
- Yesterday
- c++
- 해커랭크
- 프로그래머스
- 영어공부
- 코딩공부
- hackerrank
- 캐나다생활
- 컴퓨터
- 하드웨어
- C언어기초
- 너비우선탐색
- 스위프트플레이그라운드
- 프로그래밍
- 다이나믹프로그래밍
- 백준
- BFS
- 알고리즘
- 애플
- c언어
- 캐나다
- 깊이우선탐색
- dp
- 그리디
- 기초
- greedy
- DFS
- 컴퓨터사이언스
- 컴퓨터공부
- 문제풀이
- 아이패드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |