문제
https://www.acmicpc.net/problem/2775
2775번: 부녀회장이 될테야
첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다
www.acmicpc.net
나의 풀이
def trinumber(k,n):
numberlist=list(range(0,n+1))
nextnumberlist=list(range(0,n+1))
for k in range(k): #층수 확인용
numberlist=nextnumberlist.copy()
for i in range(1,n+1): #n호까지 돌기
count=0
for j in range(1,i+1): #현재 있는 호 사람 수 구해주기
count+=numberlist[j]
nextnumberlist[i]=count
return nextnumberlist[n]
for i in range(int(input())):
k=int(input())
n=int(input())
print(trinumber(k,n))
문제 접근
. 현재 층의 사람 수를 numberlist에 저장하고 윗 층의 사람 수를 nextnumberlist에 저장하였다.
. 0층의 사람 수는 list(range(0,n+1))을 사용하여 n호까지의 사람을 0부터 n명으로 만들어주었다.(1번째 리스트를 1호로 생각하고 0번째 리스트는 코딩의 편의를 위해 사용하지 않았다.)
. 삼중 for문을 이용해 첫 번째 for문은 현재 계산하고 있는 층수를 보여주는 용도이고
두 번째 for문은 현재 층수를 n호까지 돌면서 nextnumberlist를 채워주는 용도이고
마지막 for문으로는 현재 있는 호의 사람 수를 구하는 용도이다.
배운 내용
numberlist=nextnumberlist.copy()
5번째 줄인 이 부분에서 처음에는 numberlist=nextnumberlist로 사용하였는데 그렇게 사용하게 되면 두 개가 주소값이 같은 아예 같은 list가 되어버려 한 list가 변하면 다른 list도 변하는 상황이 발생해버렸다. 즉,같은 list가 이름만 두 개가 된 것이다.
따라서 list의 값만을 복사하고 싶다면
list_B = list_A.copy() 처럼 사용하거나
list_B = list_A[:] 처럼 사용해야 한다.
list_B = list_A[:] 처럼 사용해야 한다.
'알고리즘 공부' 카테고리의 다른 글
시간복잡도 구하기 (0) | 2022.12.31 |
---|---|
백준 4948, 소수 구하기 (에라토스테네스의 체) (0) | 2022.12.31 |
백준 1157번, dictionary 활용, count함수 (2) | 2022.12.27 |
백준 1316번 (미해결) (0) | 2022.12.08 |
백준 2941번 (0) | 2022.12.08 |
댓글