백준 2309(일곱 난쟁이) - Python(파이썬) - Combinations 사용,브루트포스
반응형
💬 처음 생각한 풀이(Python(파이썬))
단순하게 python으로 풀 때
① combinations 함수를 사용하여 일곱명 뽑기
② 합이 100인 경우를 찾아 출력
*여기서 주의할점은 sort는 원본을 변경하지만, sorted는 원본을 변경하지 않는다.
* tuple: sort()함수를 사용하지 못하므로 -> sorted를 사용하여 정렬 후 출력
💻파이썬(Python)
import sys
from itertools import combinations
arr=[]
#난쟁이 아홉명 키 입력받기
for i in range(9):
arr.append(int(sys.stdin.readline()))
nC7 = combinations(arr,7)
for i in nC7:
if sum(i)==100:
#sorted 원본을 변경시키지 않음,sort는 원본 변경
#튜플은 sorted 사용 못함
#join으로 출력하기 -> 하나 출력했으면 그만하기
print("\n".join(str(j) for j in sorted(i)))
break
💬 두번째 풀이
dfs 방식을 사용하여서
배열에서 일곱개를 뽑는 것보다 두개를 뽑아 (아홉개의 난쟁이의 합-100)과 일치하는 값을 찾도록 한다.
① 배열에서 두 명의 난쟁이 뽑기
② (아홉개의 난쟁이의 합 - 100)==뽑은 두개의 합인 경우의 나오는 두명의 난쟁이를 제외하고 출력하기
💻파이썬(Python)
import sys
from itertools import combinations
arr=[]
#난쟁이 아홉명 키 입력받기
for i in range(9):
arr.append(int(sys.stdin.readline()))
chk=[False]*9
result=[]
#depth: 개수
def comb(depth,start):
if depth==2:
result.append([arr[i] for i,check in enumerate(chk) if check])
for i in range(start,9):
#난쟁이 한명 뽑기
chk[i]=True
comb(depth+1,i+1)
chk[i]=False
comb(0,0)
for i in result:
if sum(arr)-sum(i)==100:
#arr에서 두개의 배열을 제외한 값을 입력
l = sorted([j for j in arr if j not in i])
print("\n".join(str(j) for j in l))
break
반응형
'[백준] Python,Java로 풀기📖 > DFS&BFS' 카테고리의 다른 글
백준 13565(침투) - Python(파이썬) - DFS (0) | 2022.06.27 |
---|---|
백준 2667(단지번호 붙이기) - Python(파이썬) - BFS (0) | 2022.06.14 |
백준 2178(미로 탐색) - Python(파이썬) - BFS (0) | 2022.06.14 |
백준 24479(깊이 우선 탐색 1) - Python(파이썬),Java(자바) - DFS (2) | 2022.06.01 |
백준 18352(특정 거리의 도시 찾기) - Python(파이썬) -BFS (0) | 2022.05.25 |