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))
채점
반성
테스트 케이스가 여럿인 경우 출력 사이에 공백 한 줄이 필요하다.
연산은 두자리 수가 되면 멈춰야한다.
조건들이 헷갈려서 자꾸 틀렸다.
아니 그러고보니 그러면 저 자바 코드도 틀린게 맞네.
메모리 초과가 아니었어도 넌 나가리였어.
코드 확인