Baekjoon Case

[파이썬 / 백준 10160번] 30

Scarlett_C 2021. 10. 28. 11:39
728x90

https://www.acmicpc.net/problem/10610

진짜 한 일주일동안 풀었던 것 같다.

 

처음에는 엄청 쉽다고 생각했는데 알고보니 생각을 잘 못 하고 있었다.

 

처음에는

1. 0이 없으면 -1

2. 2자리수면 3으로 나누어지는지

3. 3자리수 이상이면 0을 빼고 나머지 숫자 2개를 조합해서 끝 두 자리가 3으로 나뉘어지는지

로 기준을 나누어서 코딩을 짰는데,

시간초과, 출력초과 기타등등.. 디버깅 해 보니까 전혀 안맞음

 

이유는 전혀 모르겠지만 처음에 3번에 너무 꽂혀있어서

만들 수 있는 두 자리 조합중 가장 작으면서 큰(??) 수를 빼고,, 나머지 숫자로 큰 수를 조합해서 출력하는것으로 했다..

동적계획법때문에 계속 작은 부분으로 먼가 해결하려고 한듯..

 

왜 인지 모르겠는데 끝 두 자리 수가 3으로 나누어지면 3의 배수라고 생각했던 것 같다...

알고보니 전체 자리 수를 다 더해서 3의 배수가 되면 그 수는 3의 배수인것이었움...

 

그래서 각 자리 수를 다 더한다음에 3의 배수인지 보고 아니면 -1, 

3의 배수라면 내림차순으로 정렬하여서 출력 하는것으로 짜니까.. 

훨씬 간단하 코딩이 나왔다..

 

내가 풀고도 너무 허무해서 포스팅함

 

N=input()
if N.count('0')==0: print(-1)
else:
    NL=sorted(N,reverse=True)
    vl=list(map(int,NL))
    if sum(vl)%3!=0: print(-1)
    else:
        print(''.join(NL))
728x90