https://www.acmicpc.net/problem/6603
- python 라이브러리 combinations을 사용하면 쉽게 풀 수 있지만...직접 구현해서 풀자
# 정답 풀이
import sys
input = sys.stdin.readline
def dfs(depth, idx):
if depth == 6:
print(*out)
return
for i in range(idx, k):
out.append(S[i])
dfs(depth + 1, i + 1)
out.pop()
while True:
array = list(map(int, input().split()))
k = array[0]
S = array[1:]
out = []
dfs(0, 0)
if k == 0:
exit()
print()
- DFS를 이용한다. depth는 로또 번호 길이로 6이 되면 return하고, idx로 번호를 순회한다.
https://www.acmicpc.net/problem/9375
# 정답 풀이
import sys
import math
input = sys.stdin.readline
T = int(input())
for _ in range(T):
n = int(input())
clothes = {}
for _ in range(n):
a, b = map(str, input().split())
if b in clothes:
clothes[b] += 1
else:
clothes[b] = 1
ans = 1
for i in clothes:
ans *= (clothes[i]+1)
print(ans-1)
- 종류당 옷의 개수 +1을 곱하고, 모두 안입는 경우를 제외한 ans-1을 해준다.
- 모든 옷 종류 + 옷을 선택하지 않는 경우의 수(1)
https://www.acmicpc.net/problem/2407
import sys
import math
input = sys.stdin.readline
c,m=map(int, input().split())
print(math.factorial(c)//(math.factorial(m)*math.factorial(c-m)))
https://www.acmicpc.net/problem/10972
# 정답 풀이
n = int(input())
data = list(map(int, input().split()))
for i in range(n-1, 0, -1): # 맨 뒤 값부터 시작
if data[i-1] < data[i]:
for j in range(n-1, 0, -1): # 다시 맨 뒤 값부터 큰 값찾기
if data[i-1] < data[j]:
data[i-1], data[j] = data[j], data[i-1] # 둘 값을 swap
data = data[:i] + sorted(data[i:])
for i in data:
print(i, end=' ')
exit()
print(-1)
- 모든 순열을 구하는 방식은 시간초과가 난다.
- 다음 순열을 찾는 방법은 주어진 순열(data)의 맨 뒤에서부터 탐색하며 앞 숫자가 뒷 숫자보다 감소할때 해당 숫자를 뒤집으면 된다. 뒤집은 뒤 다음 숫자들은 정렬한다.
https://www.acmicpc.net/problem/10973
n = int(input())
data = list(map(int, input().split()))
for i in range(n-1, 0, -1): # 맨 뒤 값부터 시작
if data[i-1] > data[i]:
for j in range(n-1, 0, -1): # 다시 맨 뒤 값부터 작은 값찾기
if data[i-1] > data[j]:
data[i-1], data[j] = data[j], data[i-1] # 둘 값을 swap
data = data[:i] + sorted(data[i:], reverse=True)
for i in data:
print(i, end=' ')
exit()
print(-1)
- 이전 문제랑 완전 반대로~ 뒤 숫자를 정렬할 때 reverse하는 것을 잊지 말자.
# 회고
조합은 너무 어렵다ㅜㅜㅜㅜ
식을 찾는 것 자체가 뭔가...생각해내는게 안된다. 물리 푸는 기분이야....이것도 풀다보면 좀 보일려나..?
일단 좀 더 연습을 하고 와야할 것 같다!
'코딩테스트' 카테고리의 다른 글
[Python] 동적 프로그래밍 문제 풀이 정리(1) (1) | 2024.06.06 |
---|---|
[Python] 동적 계획법 (0) | 2024.06.01 |
[Python] 조합 문제 풀이 정리(1) (0) | 2024.05.29 |
[Python] 조합 (0) | 2024.05.25 |
[Python] 트리 문제 풀이 정리 (0) | 2024.05.21 |