관리 메뉴

솜씨좋은장씨

[BaeKJoon] 10610번: 30 (Python) 본문

Programming/코딩 1일 1문제

[BaeKJoon] 10610번: 30 (Python)

솜씨좋은장씨 2020. 3. 31. 03:31
728x90
반응형

1일 1문제 54일차!

오늘의 문제는 백준의 30입니다.

 

10610번: 30

문제 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다. 미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라. 입력 N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다. 출력 미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는

www.acmicpc.net

Solution 1

N = input()

N = list(N)

answer = -1

max_num = sorted(N, reverse=True)

max_num = int(''.join(max_num))


if max_num % 30 == 0:
    answer = max_num
    
print(answer)

풀이

가장 큰 숫자를 찾는 것이니 모든 숫자를 내림차순으로 정렬하고

이 숫자가 30으로 나누어지면 정렬한 숫자를 출력하고

그렇지 않으면 -1을 출력하도록 하였습니다.

 

결과

 

솔직히 이렇게 되겠어? 라고 풀었는데 맞았다는 결과가 나와서 조금 놀랐습니다.

다 풀고나서 찾아보니 이 문제는 배수 판정법이라는 방법을 사용해서 풀어도 되는 문제였습니다.

 

30의 배수인지 아닌지 확인하는 법

- 30의 배수는 10의 배수이니 마지막 숫자가 0

- 그리고 3으로 나누어져야함

 

Solution 2

N = input()

N = list(N)

answer = -1

if min(N) == '0':
    max_num = sorted(N, reverse=True)

    max_num = int(''.join(max_num))

    if max_num % 3 == 0:
        answer = max_num
    
print(answer)

풀이

먼저 입력 받은 숫자문자열을 list로 만들고 그 값에서 가장 작은 값이 '0' 인지 아닌지 비교하고

'0' 이라면 내림차순 정렬 후에 정수로 만들어주고 그 수가 3의 배수인지 아닌지를 확인하고

3의 배수라면 이 값을 정답으로 출력합니다. 그렇지 않으면 -1을 출력합니다.

 

결과

 

 

SOMJANG/CODINGTEST_PRACTICE

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments