본문 바로가기
코딩테스트

[Python, C] 백준 1110번 풀이

by CuckooBird 2022. 12. 29.

문제

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 = int(input())

or_n = n
n = 0
f_n = or_n // 10
b_n = or_n % 10
cnt = 0
while True:
    n = b_n*10 + (f_n+b_n)%10
    f_n = n // 10
    b_n = n % 10
    cnt += 1
    if n == or_n:
        break

print(cnt)

n : 입력받고, 새로운 숫자를 계속해서 넣을 변수.

or_n : origin number의 의미로 만든 변수. 맨 처음 입력받은 n을 저장해놓음.

f_n : front number의 의미로 만든 변수. 들어온 숫자의 몫을 가짐.

b_n : back number의 의미로 만든 변수. 들어온 숫자의 나머지를 가짐.

cnt :  사이클의 길이를 측정하는 변수. 반복문이 반복된 횟수를 셈으로써 길이를 측정함.

 

파이썬에는 do while문이 없다는 걸 알게 됨


C언어

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
	int num,firstNum,secondNum,newNum;
	int count = 0;
	int result = -1;

	scanf("%d", &num);

	newNum = num;

	if (0 <= num && num <= 99) {

		while (num!=result) {
			firstNum = newNum / 10;  //2
			secondNum = newNum % 10;   //6

			newNum = (secondNum * 10) + ((firstNum + secondNum)%10); //60+8
			result = newNum;

			count++;
		}printf("%d", count);
	}

	return 0;
}

파이썬 코드와 같은 알고리즘. 오늘 짠 코드는 아니고 7달전에 짠 코드

 


후기

백준에 이미 성공으로 떠있길래 언제 한거지? 했는데 역시 기억이 안 남... 7달전이면 스터디할 때 푼 것 같은데 문제는 기억나지만 언제 풀었는지는 가물가물하다. 오늘이 지나기 전에 올리려고 허겁지겁 11시에 백준 틀어서 풀었다.

 

가만 생각해보니 후기를 일기장 처럼 쓰는 것 같아서 이래도 되는 건가 싶긴 하다. ㅋㅋ 그치만 재밌으니까~ 오늘의 일기 :

아직 기숙사에서 쌌던 짐이 안 와서 창업동아리 지원금으로 샀던 '이것이 자바다' 라는 책을 못 받고 있다. 그래서 오늘 도서관에 가서 대출해오려고 했지만 만만치 않은 두께라 포기하고 만화 코너에 가서 배ㅌ맨 봤다. 재밌었다... 큽.. 집와서 더뉴ㅌ타이탄도 봤다... 연말 세일인지 모르겠는데 아마존에서 전자책을 엄청 싸게 팔길래 이번달(클쓰마스에 연말세일?때문에 세일함)과 저번달(블프때문에 세일 했었음) 합쳐서 5만원 이상은 쓴 것 같다.. 오늘 학교에서 진행한 프로그램에 대한 상금을 5만원 딱 받았다. 기분이 좋다.

하지만 내일 창업동아리 회의를 해야해서 준비를 해야한다. 준비는 귀찮고 힘들지만 아무 준비도 안 하면 진행하는데 그게 더 힘들어서 준비하고 편하게 진행하는게 좋다. 내일 오후에 하니까 천천히 해야지.. 끗