졍
지영이 블로그
졍
전체 방문자
오늘
어제
  • 분류 전체보기 (95)
    • 네트워크 (12)
    • 시스템설계 (6)
    • AWS (7)
    • Elasticsearch (3)
    • Python (5)
    • 자료구조, 알고리즘 (9)
    • 코딩테스트 (29)
    • NCP (8)
    • 운영체제 (7)
    • 개인 프로젝트 (8)
    • Github (1)
    • 여행 (0)
      • 2024동유럽 (0)
    • 대학원 (0)
      • 논문정리 (0)

최근 글

최근 댓글

hELLO · Designed By 정상우.
졍

지영이 블로그

코딩테스트

[Python] 백준 10610번 - 30

2022. 7. 29. 15:08

문제

어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다.

미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라.

입력

N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다.

출력

미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라.

풀이

n = int(input())
n_list = list(map(int, str(n)))

if 0 not in n_list:
    print(-1)
else:
    n_list.remove(0)
    n_list.sort(reverse=True)
    largest_num = ''.join(str(x)for x in n_list)
    largest_num = int(largest_num)
    while largest_num % 3 != 0:
        continue
    print(largest_num*10)

이렇게 코드를 작성하고 continue부분을 참고하려고 했다.

n_list 배열 내에서 순서를 달리해주며 작은수로 변경해나가려고 했었다.

 

근데 풀이를 찾아보니 "정수의 배수 판정법"을 활용하여 푸는 문제라고 한다.

3의 배수를 판정할 때는 각 자리수의 합이 3의 배수이면 3의 배수라고 한다.

n = int(input())
n_list = list(map(int, str(n)))

if 0 not in n_list:
    print(-1)
else:
    n_list.remove(0)
    if sum(n_list) % 3 == 0:
        n_list.sort(reverse=True)
        largest_num = ''.join(str(x)for x in n_list)
        largest_num = int(largest_num)
        print(largest_num*10)
    else:
        print(-1)

따라서 이렇게 수정하여 풀어주었다.

 

 

10610번: 30

어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한

www.acmicpc.net

 

'코딩테스트' 카테고리의 다른 글

[Python] 백준 1700번 - 멀티탭 스케줄링  (0) 2023.06.01
[Python] 백준 1012번 - 유기농 배추  (0) 2023.05.31
[Python] 백준 13335번 - 트럭  (0) 2023.05.04
[Python] 백준 1987번 - 알파벳  (0) 2023.05.04
[Python] 백준 9205번 - 맥주 마시면서 걸어가기  (0) 2023.05.01
    졍
    졍

    티스토리툴바