/ 제출 1 /
from itertools import combinations_with_replacement
n = int(input())
count = []
opt = [1, 5, 10, 50]
#for i in range(n+1):
comb = list(combinations_with_replacement(opt, n))
comb = list(map(list, comb))
for c in comb:
if sum(c) not in count:
count.append(sum(c))
print(len(count))
풀이 소요 시간: 22분
중간에 2번 정도 미끄러졌습니다.
1. 중복 조합으로 풀어야 하는데 조합으로 풀었습니다. 조합을 반복해서 카운트를 세면 된다고 생각했습니다.
이건 문제보다는 라이브러리를 앞서 생각해서 그런 것 같습니다. "문제 해결"에 집중해야겠습니다.
2. 조합으로 풀다보니 해당 조건에 맞게 for문을 사용한다던지, 아예 문자열이 안 만들어지는 경우를 빼던지 하는 옵션을 넣어서 코드를 구성하니 n의 쓰임과 범위에 대해 헷갈리게 되었었습니다. 적절하게 문제에 접근합시다.
비교적 실버다운 실버 문제를 풀어서 가뿐하게 넘어가 좋습니다. 확실히.. 배열 문제에 약하고 문자열에는 조금 더 자신 있게 접근하는 것 같습니다.
/ 다른 분들 풀이 /
import sys
from itertools import combinations_with_replacement
N = int(sys.stdin.readline())
lst = [1, 5, 10, 50]
result = []
for i in combinations_with_replacement(range(4), N):
sum=0
for j in i:
sum+=lst[j]
result.append(sum)
print(len(set(result)))
알고리즘 자체는 비슷한데 구현 방식이 조금 다른 것 같아 살펴봤습니다.
이 문제 푼 사람들 대부분이 위의 동일 코드로 통과하신 것 같습니다.
combinations_with_replacement (range(4), N) : 여기에서 lst 자체를 주는게 아니라 range범위를 주는게 저와 다른 구현이었습니다.
0, 1, 2, 3 인덱스의 구성 값으로 중복조합을 설정하고 그 뒤에 해당 조합마다 for문으로 sum을 구하는 방식으로 하신 것 같습니다.
'CodingTest > Baekjun Online Judge' 카테고리의 다른 글
[ 백준 / BOJ ] 2504 괄호의 값 (0) | 2022.07.01 |
---|---|
[ 백준 / BOJ ] 1966 프린터 큐 (0) | 2022.07.01 |
[ 백준 / BOJ ] 16924 십자가 찾기 (0) | 2022.06.30 |
[ 백준 / BOJ ] 16917 양념 반 후라이드 반 (0) | 2022.06.30 |
[ 백준 / BOJ ] 1913 달팽이 ( 다시 풀기 ) (0) | 2022.06.30 |