6976번 Divisibility by 11 | 뭐라도 하겠지

6976번 Divisibility by 11

이왜틀?


img01

6976번 Divisibility by 11 - 백준

4년 전 메모리 초과 문제.

int t=Integer.parseInt(br.readLine());
for(int q=0;q<t;q++){
    if(q!=0) bw.write("\n");
    BigInteger a=new BigInteger(br.readLine());
    BigInteger b=a;
    StringBuilder sb=new StringBuilder();
    sb.append(a.toString()+"\n");
    while(true){
        if(b.toString().equals("11")) break;
        b=b.divide(BigInteger.TEN).subtract(b.mod(BigInteger.TEN));
        sb.append(b.toString()+"\n");
    }
    sb.append("The number "+a.toString()+" is divisible by 11.\n");
    bw.write(sb.toString());
}

방식 자체는 맞는 것 같지만 메모리 초과다.

설계


최대 50자리라는 엄청나게 큰 숫자.
일반적인 숫자 자료형으로는 해결할 수 없겠지.
하지만 파이썬이 등장한다면 어떨까?

구현


파이썬은 신이고 무적이라서 그냥 연산이 가능하다.
진짜 파이썬은 전설이다…

T = int(input())

for t in range(T):
    if (t != 0):
        print()

    string_num = input().strip()
    num = int(string_num)

    print(num)

    while num > 99:
        remain = num % 10
        num = num // 10 - remain
        print(num)
        
    if (num % 11 == 0):
        print("The number {} is divisible by 11.".format(string_num))
    else:
        print("The number {} is not divisible by 11.".format(string_num))

채점


img02

반성


테스트 케이스가 여럿인 경우 출력 사이에 공백 한 줄이 필요하다.
연산은 두자리 수가 되면 멈춰야한다.
조건들이 헷갈려서 자꾸 틀렸다.

아니 그러고보니 그러면 저 자바 코드도 틀린게 맞네.
메모리 초과가 아니었어도 넌 나가리였어.

코드 확인


Link to GitHub

Updated: