백준 알고리즘 1110번 더하기 사이클 문제입니다.
(참고 - https://www.acmicpc.net/problem/1110 )
코드)
#include <stdio.h>
int main() {
int buf[2];
int num, first, second, sum, cnt=0;
scanf("%d", &num);
if(num >= 10) {
first = num / 10;
second = num % 10;
}
else {
first = 0;
second = num;
}
buf[0] = first;
buf[1] = second;
do {
sum = 0;
sum = first + second;
first = second;
if(sum >= 10)
second = sum % 10;
else
second = sum;
cnt++;
} while(buf[0] != first || buf[1] != second);
printf("%d\n", cnt);
return 0;
}
- 저는 원래의 숫자를 기억하기 위해 buf라는 배열에 첫번째, 두번째 숫자를 입력하여 저장하였습니다.
0부터 99까지이므로 first는 입력받은 숫자를 10으로 나눠주어 몫의 값을, second에는 10으로 나눈 나머지의 값을 하여 0~9의 숫자가 각각 들어가게 됩니다. 이후 do-while문을 이용하여 처음 한번은 무조건 수행하는 로직으로,
buf[0](== 초기 입력받은 first값)과 buf[1](== 초기 입력받은 second값)이 로직에 의해 변한 first값과 second이 하나라도 다를동안은 계속 반복하도록 하였으며, sum이라는 임시 변수를 하나 두어, while문 안에서 first와 second의 값을 계속 변화시켜주도록 하였습니다.
이 또한 문제를 보시고 '더해줄 때의 뒤의 숫자가, 계산 후의 10의자리로 변한다' 라는 규칙을 찾으면 되는 부분입니다.
+Java)
import java.util.Scanner;
public class algo1110 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int ori = sc.nextInt();
int[] split = new int[2];
split[0] = ori / 10;
split[1] = ori % 10;
int flag = 1;
move(split);
while(true) {
if(ori == calc(split)) {
System.out.println(flag);
break;
} else {
move(split);
flag++;
}
}
sc.close();
}
public static void move(int[] arr) {
int tmp = arr[1];
arr[1] = (arr[0] + arr[1]) % 10;
arr[0] = tmp;
}
public static int calc(int[] arr) {
return (arr[0] * 10) + arr[1];
}
}
'Programming > Algorithm' 카테고리의 다른 글
백준 알고리즘 - 1789번 : 수들의 합 (0) | 2016.04.19 |
---|---|
백준 알고리즘 - 1731번 : 추론 (0) | 2016.04.19 |
백준 알고리즘 - 1100번 : 하얀 칸 (0) | 2016.04.19 |
백준 알고리즘 - 1085번 : 직사각형에서 탈출 (0) | 2016.04.19 |
백준 알고리즘 - 1057번 : 토너먼트 (0) | 2016.04.19 |
WRITTEN BY