[boj][python] 1110 더하기 사이클

ppparkta·2022년 12월 8일
1

Problem solving

목록 보기
53/65

1110 더하기 사이클


파이썬으로 풀다가 도저히 무한루프에 빠지는 이유를 못 찾겠어서 c++로 옮겨서 풀었더니 맞았던 그런... 문제다. 단순히 구현만 하면 성공인데 파이썬에서는 무한 로딩에 빠져버린다. 아직 문법 숙지를 못해서 그런거같다.

<맞은 c++코드>

#include <iostream>
using namespace std;
int n, m, tmp, ans;

int main()
{
    cin >> n;
    if (n == 0)
    {
        cout << 1 << '\n';
        return 0;
    }
    while (n != tmp)
    {
        if (ans == 0)
            tmp = n;
        if (tmp > 9)
            m = (tmp / 10) + (tmp % 10);
        else
            m = tmp;
        tmp = ((tmp % 10) * 10) + (m % 10);
        ans++;
    }
    cout << ans << '\n';
    return 0;
}

<틀린 python 코드>

n = int(input())
m = 0
tmp = 0
ans = 0
while tmp != n:
    if ans == 0:
        tmp = n
    if tmp > 9:
        m = (tmp/10)+(tmp % 10)
    else:
        m = tmp % 10
    tmp = ((tmp % 10)*10)+(m % 10)
    ans += 1
print(ans)

0 예외처리를 제외하면 두 코드가 동일한 기능을 하는것처럼 보이는데 왜 입력을 여러번 받는걸까?

에서 뭔가 싸한 느낌이 들어서 기본 문법을 찾아봤는데.../도 문제가 됐던거 같다. 저렇게 처리해버리면 수가 실수로 나올다. 내가 원하는건 //를 써야 된다. 고쳐도 제대로 동작 안하긴 했음ㅋㅋ

형식 말고는 식이 다 틀린거 같아서 처음부터 다시 작성하기로 결정했다.

좀더 깔끔하고 짧게 작성했다.

<맞은 python 코드>

n = int(input())
tmp = n
ans = 0
while True:
    a = tmp//10+tmp % 10
    tmp = tmp % 10*10+a % 10
    ans += 1
    if tmp == n:
        break
if n == 0:
    print(1)
else:
    print(ans)
profile
겉촉속촉

0개의 댓글