✅파이썬 배열 문제(백준2775번)

이상민·2023년 6월 17일
0

알고리즘

목록 보기
11/128

📖문제

  • 평소 반상회에 참석하는 것을 좋아하는 주희는 이번 기회에 부녀회장이 되고 싶어 각 층의 사람들을 불러 모아 반상회를 주최하려고 한다.

  • 이 아파트에 거주를 하려면 조건이 있는데, “a층의 b호에 살려면 자신의 아래(a-1)층의 1호부터 b호까지 사람들의 수의 합만큼 사람들을 데려와 살아야 한다” 는 계약 조항을 꼭 지키고 들어와야 한다.

  • 아파트에 비어있는 집은 없고 모든 거주민들이 이 계약 조건을 지키고 왔다고 가정했을 때, 주어지는 양의 정수 k와 n에 대해 k층에 n호에는 몇 명이 살고 있는지 출력하라. 단, 아파트에는 0층부터 있고 각층에는 1호부터 있으며, 0층의 i호에는 i명이 산다.

📗입력

  • 첫 번째 줄에 Test case의 수 T가 주어진다. 그리고 각각의 케이스마다 입력으로 첫 번째 줄에 정수 k, 두 번째 줄에 정수 n이 주어진다

📘출력

  • 각각의 Test case에 대해서 해당 집에 거주민 수를 출력하라.

📄내가 작성한 코드

import sys

T = int(sys.stdin.readline())

for _ in range(T):
    k = int(sys.stdin.readline()) #층
    n = int(sys.stdin.readline()) #호
    count = 0
    arr = [[0] * n for i in range(k+1)]
    for j in range(k+1):
        arr[j][0] = 1

    for i in range(1,n):
        temp = 0
        for j in range(k+1):
            temp += arr[j][i-1]
            arr[j][i] = (temp + 1)

    count = arr[k][n-1]
    print(count)

👉코드 설명

  • 문제의 규칙
    1.각 층의 1호는 전부 1명이다.
    2.구하려는 층,호의 사람 수는 이전 호수의 층별 사람 수의 합 + 1이다.
    ex) 3층 3호 = 0층 2호 + 1층 2호 + 2층 2호 + 3층 2호 + 1

  • 입력받은 k,n을 통해 2차원 리스트을 선언한다. (k는 0층부터 시작이므로, k+1)

  • 각 층의 1호는 1명이므로 리스트의 첫번째에 전부 1을 넣어준다.

  • 2호부터 이전 호수(i-1)의 층별 사람수를 temp에 더한다.

  • 해당 호수(i)에 차례로 temp + 1 값을 저장한다.

  • k+1만큼 반복후 temp값을 0으로 초기화 한뒤 다음 호수의 리스트값을 채운다.

  • 문제에서는 n이 1부터이므로 arr[k][n-1]값을 출력한다.

❗❗Key Point

  • 각 층의 1호는 1명
  • 구하려는 층,호의 사람 수는 이전 호수의 층별 사람 수의 합 + 1
  • 2차원 리스트로 층,호 구현
  • temp변수를 통해 0층 부터의 사람 수 저장

💢막혔던 부분

  • 내가 사용한 규칙말고, {해당 층의 이전 호수 + 해당 호수의 이전 층 = 구하려는 층,호의 사람수} 이 규칙을 먼저 찾았었는데 구현하다가 실패해서 다른 규칙으로 구현하였다. 이 규칙이 더 간단할 것 같긴하다.
  • 2차원 리스트로 구현해야 한다는 것을 생각해내기 어려웠다.
  • 리스트 구현이 익숙하지 않아 문법사용하는 것에도 어려움이 있었다.

😭후기

  • 리스트 구현만 익숙했다면 금방 풀었을것 같다
profile
개린이

0개의 댓글