BOJ / Greedy / 30 / Python
n을 리스트로 입력받아서 숫자 한 자리씩 떼어내서 저장
itertools.permutations로 가능한 모든 숫자 조합을 만들어 리스트로 저장
그 리스트를 내림차순으로 정렬 후
30으로 나눠가며 나누어 떨어지면 해당 값이 정답이 된다.
위와 같이 풀어봤는데 메모리 초과가 떴다.
쓸데없이 복잡하게 생각했다.
풀면서
- 개행문자 빼고 문자열 입력받기
n = input().rstrip()
-
"구분자".join(리스트)
구분자를 기준으로 리스트 내의 문자들을 합쳐준다. -
형변환, map(함수, 반복 가능한 자료형)
여러 개의 데이터를 한 번에 자료형으로 변환할 때
두 번째 인자로는 주로 리스트나 튜플이 들어간다.
nums = list(map(int, input().rstrip()))
nums = map(str, nums)
내 코드1
import sys
input = sys.stdin.readline
# 개행문자빼고 입력받은 문자열을 map(int,~)로 정수형으로 변환 후 리스트화
nums = list(map(int, input().rstrip()))
if 0 not in nums or sum(nums) % 3 != 0:
print(-1)
else:
# 최댓값을 찾는 거니까 + 0은 자동으로 가장 끝자리에 위치
nums.sort(reverse=True)
# 정수형으로 저장된 nums 리스트내의 모든 값들을 str형으로 변환
nums = (map(str, nums))
print("".join(nums))
30의 배수를 찾아내는 조건문을 만들어 주면 된다.
3의 배수는 각 자릿수의 합이 3의 배수다.
즉, 0이 반드시 1개 이상 존재하고 모든 자릿수들의 합이 3의 배수라면 30의 배수가 된다.
내 코드2
import sys
input = sys.stdin.readline
nums = list(input().rstrip())
nums.sort(reverse=True)
if nums[-1] != '0' or sum(map(int, nums)) % 3 != 0:
print(-1)
else:
print("".join(nums))
sum을 구할 때만 nums내의 값들이 정수형이면 된다.
실행 시간이 줄었다.
Author And Source
이 문제에 관하여(BOJ / Greedy / 30 / Python), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@k_dah/BOJ-Greedy-30-Python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)