블랙잭 (2798) / 분해합 (2231) / 일곱 난쟁이 (2309)

Yeoncheol Kang·2023년 2월 22일
1
post-thumbnail

브루트 포스 기초문제

  • 하단 영상에서 추천해주신 문제를 풀어보았다.

  • 코딩테스트 문제 추천! (2023년 2월 2주차)
  • 기초 브루트 포스 문제들은 첫 번째 시도에서 한 번에 맞추도록 해야한다.
  • 두 문제는 이미 풀어본 적이 있지만 Python으로 다시 시도했다.

블랙잭 (2798) [브론즈 II]

from itertools import combinations
# 0. 입력받기. 조합을 이용.

n, m = map(int, input().split())
cards = list(map(int, input().split()))

# 1. 3개씩 조합을 뽑아 더하면서 크기 체크
answer = 0
for selected in combinations(cards, 3):
    if sum(selected) <= m:
        answer = max(sum(selected), answer)
        
print(answer)
  • 최대한 단순하게 구현했다. combination을 활용해 3개로 조합을 뽑아 그 합이 m 미만인지 따졌다.


분해합 (2231) [브론즈 II]

# 0. 입력 받기
n = int(input())
answer = 0

# 1. 부르트 포스이므로 1부터 그냥 돌려버려도 될 듯.
# 단, 제일 작은 생성자를 찾으라 했고 분해합 특성 상 n보다는 작아야 함.
for number in range(1, n + 1):
    # 1-1. int -> str -> 각 자리수 list로 변환
    number_listed = list(str(number))
    # 1-2. 각 자리수 list를 int로 다시 바꿔서 진행
    number_listed = [int(i) for i in number_listed]
    
    # 2. 생성자인지 체크
    if number + sum(number_listed) == n:
        answer = number
        break
    
print(answer)
  • 제일 작은 생성자라는 조건 하에 0부터 루프를 돌리되, 발견하면 루프를 종료해도 된다.


일곱 난쟁이 (2309) [브론즈 I]

# 0. 조합을 이용. 입력 준비
from itertools import combinations

dwarfs = []
for _ in range(9):
    dwarfs.append(int(input()))

# 1. 조합을 돌려보며 답 찾기
answer = 0
for real in combinations(dwarfs, 7):
    if sum(real) == 100:
        answer = real
        break

# 2. 오름차순으로 세로로 출력
for i in sorted(answer):
    print(i)
  • 간단하게 조합을 이용했다. 총 9개의 후보군 중 7개의 조합을 뽑아 합이 100이면 답이다.

profile
재밌는 것들을 직접 해보기를 좋아합니다

0개의 댓글