백준 알고리즘 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];

}

}


WRITTEN BY
SiriusJ

,