[2775번 - 파이썬] - 부녀회장이 될테야
2023. 2. 22. 14:11ㆍAlgorithm
솔직히 난 너무 어려웠다. 처음 풀 때는 남들이 푼 것도 다 보고해 봤지만 이해가 안 됐다. 여러 부분에 문제가 있었겠지만 기본적으로 기본 개념이 부족한 거 같았다.
이걸 보고 있다면 보기 전에 이중리스트, 파이썬 math 라이브러리에서 comb 쪽을 다시 공부하고 보는 게 좋을 거 같다.
- 1번 풀이 이중 리스트를 이용한 풀이
- 2번 풀이 라이브러리를 이용한 풀이
문제를 풀기 전에 생각해둬야되는 조건들
- 테스트 개수 첫줄에 입력
- 각층 호수를 한줄씩 입력
- 문제에서 0층은 0~i 라고 했으니 그 값 설정
- 1층 이상의 거주민 수 구하기
- 3, 4번의 값들을 담을 이중 리스트 구성하기
1번 이중 리스트를 이용한 풀이 방법 - 전체 코드
t = int(input()) # 테스트 케이스 수 입력받기
for _ in range(t):
k = int(input()) # 층 수 입력받기
n = int(input()) # 호실 수 입력받기
# 각 층과 호실마다 거주민 수를 저장하는 2차원 리스트 초기화
arr = [[0] * (n+1) for _ in range(k+1)]
# 0층 거주민 수 초기화
for i in range(n+1):
arr[0][i] = i
# 각 층의 거주민 수 구하기
for i in range(1, k+1):
for j in range(1, n+1):
arr[i][j] = arr[i-1][j] + arr[i][j-1]
print(arr[k][n]) # 결과 출력
# 각 층과 호실마다 거주민 수를 저장하는 2차원 리스트 초기화
arr = [[0] * (n+1) for _ in range(k+1)]
여기 부분 arr이는 초기화하는 부분으로써 총 층수와 호수를 이용해 0으로된 리스트들을 만든다.
# 0층 거주민 수 초기화
for i in range(n+1):
arr[0][i] = i
print(arr)
# 각 층의 거주민 수 구하기
for i in range(1, k+1):
for j in range(1, n+1):
arr[i][j] = arr[i-1][j] + arr[i][j-1]
0층 거주민 수들을 아까 만든 이중 리스트의 0번째에 i 값들을 집어 넣는다 - print(arr) 값이 제대로 들어갔는지 확인해기 위해서 사용
1층 이상 거주민들을 이중 리스트에 집어 넣는데 맨 하단 부분에서는
arr[i][j] = arr[i-1][j] + arr[i][j-1] 노란 부분은 i -1 층 ( 현재 i 값으 아래층 ) j ( 현재 j층 아래층 ) 값을 가져오고 주황색 부분은 i 층 ( 현재 층 j 층 이전 값들의 합을 말한다 )의 이전 값들을 더해진 값들을 가져온다.
진짜 어려운듯
2번 math 함수의 cemb을 이용해 풀기
cemb(n, m) => nCm 을 말한다
import math
t = int(input())
people = []
for i in range(t):
k = int(input())
n = int(input())
# 각 층별로 필요한 인원 수 계산
for j in range(k+1):
num_p = math.comb(j+n, j)
people.append(num_p)
# 총 인원 수 출력
print(people[k])
'Algorithm' 카테고리의 다른 글
[이코테] 상하좌우 (0) | 2023.03.05 |
---|---|
[1978 - 파이썬] - 소수 찾기 (0) | 2023.03.04 |
[2839 - 파이썬] - 설탕배달 (0) | 2023.02.22 |
[이코테] 실전문제 4번 1이 될 때까지 (0) | 2023.02.16 |
[이코테] 실전문제 2번 큰 수의 법칙 (0) | 2023.02.09 |