Algorithm/Baekjoon
Baekjoon 2231번 분해합, 2798번 블랙잭
Hoin.s
2024. 5. 8. 16:54
2231번 분해합

123이라는 입력값이 들어왔을 때 이걸 쪼개서 다른 변수에 저장하게끔 만들어주면 될 것 같다.
n = int(input()) #분해합을 입력값으로 받음
for i in range(1, n+1): #생성자 찾기
num = sum((map(int, str(i)))) # i의 각 자릿수를 더함
num_sum = i + num # 분해합 = 생성자 + 각 자릿수의 합
# i가처음으로 분해합과 입력값이 같을때가 가장 작은 생성자를 가짐.
if num_sum == n:
print(i)
break
if i == n: #i와 입력값이 같으면 생성자 없는거.
print(0)
분해합 값을 입력받고 1부터 분해합까지의 범위 안에서 반복문을 작동시켜준다.
i의 각 자릿수를 모두 더하여 분해합을 구한다. 반복마다 i의 각 자릿수를 모두 더하여 분해합을 계산하는데 분해합을 구하기 위해서는 생성자 i와 i의 각 자리수 합이 필요하기 때문에 각 자리수 합도 구해준다. 분해합이 입려값이랑 같으면 생성자를 찾은거니까 반복문을 종료하고 생성자를 찾지 못했다면 0을 출력한다.


2798번 블랙잭

N, M = map(int, input().split()) #카드 개수 N과 합의 한도 M을 입력받음.
lst = list(map(int, input().split()))#N개 만큼의 카드에 쓰여 있는 수를 입력받음.
nlst = []
#중첩 반복문을 사용해서 모든 경우의 수의 합을 구해서 새로운 리스트에 넣음.
for i in range(N):
for j in range(i+1, N):
for k in range(j+1, N):
three = lst[i] + lst[j] + lst[k]
if three > M:#모든 경우의 수의 합이 M을 초과하면 반복문 진행, 작으면 새로운 리스트에 해당 값 추가.
continue
else:
nlst.append(three)
print(max(nlst))#max 사용해서 가장 큰 값 출력.
코드 설명은 주석으로 달아두었다.
중첩 반복문 사용이 어려웠다. + 구글링의 도움.
그래도 코드 흐름을 익힐 수 있어서 좋았던 문제다.