"""
57796kb 480ms
✅ point : 완전 탐색
1. 1 ~ n 까지 for문 순회
2. 1번 for문 안에서 입력받은 숫자들(nums)의 r개의 조합들을 for문 순회
3. 2번 for문 안에서 만약 그 조합(items)의 합이 s와 같다면 경우의 수(cnt)를 추가
"""
from itertools import combinations
n, s = map(int, input().split())
nums = list(map(int, input().split()))
cnt = 0
for r in range(1, n + 1):
for items in list(combinations(nums, r)):
if sum(items) == s:
cnt += 1
print(cnt)
"""
31120kb 652ms
⚠️ Chat GPT 가 짠 코드 (이해 완료)
맨 아래 주석을 단 코드로 짰으나
접근 방법을 아예 가늠하지 못 하고
시간이 지체된 관계로 검색함.
"""
def possible(channel, broken_buttons):
for digit in str(channel): #이동하려는 채널의 각 번호마다 for문 순회
if digit in broken_buttons: #해당 번호가 고장난 버튼의 번호라면
return False #만들 수 없는 채널이므로 False 반환
return True #확인이 모두 끝나면 만들 수 있는 채널이므로 True 반환
def press_buttons(N, broken_buttons):
min_press = abs(N - 100) # 숫자 버튼을 사용하지 않고 +, - 버튼만을 사용하는 경우
for channel in range(1000001):
# 채널은 무한대이지만 이동 가능한 채널의 조건은 500,000으로 넉넉 잡아서 500,000*2 (=1,000,000) 만큼 순회
if possible(channel, broken_buttons): # 0 ~ 1000000 안에 만들 수 있는 채널 번호 확인
min_press = min(min_press, len(str(channel)) + abs(channel - N))
# (번호 누른 횟수(=번호 길이) + 남은 채널 수 (= +,- 버튼을 눌러야 하는 수))와 min_press 비교하여 더 작은 수 반환
return min_press
N = int(input()) # 목표 채널
M = int(input()) # 고장난 버튼의 개수
broken_buttons = set(input().split()) if M > 0 else set() # 고장난 버튼이 없을 수 있으므로 초기화 처리
print(press_buttons(N, broken_buttons))
# n = input()
#
# _ = input()
#
# broken_buttons = list(map(int, input().split()))
#
# buttons = [x for x in range(10) if x not in broken_buttons]
#
# current = ''
# cnt = 0
# for char in n:
# number = int(char)
#
# if number in buttons:
# current = str(number)
# cnt += 1
# else:
# closest_number = min(buttons, key=lambda x: abs(x - buttons))
#
# print(closest_number)
항해99 취업 리부트 코스를 수강하고 작성한 콘텐츠 입니다.