• 『Python』백준 2775
    BackEnd/Python 2022. 3. 10. 14:51

    https://www.acmicpc.net/problem/2775

     

    2775번: 부녀회장이 될테야

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

    www.acmicpc.net

    백준 사이트는 여기이다. 문제와 예시 입출력은 다음과 같다.

     

     

    T = int(input()) # 입력받을 case 갯수
    for a in range(T): # case 갯수만큼 시작
        k = int(input()) # k라는 변수 즉 층이 몇층인지 입력받는다.
        n = int(input()) # n이라는 변수 즉 호가 몇호인지 입력받는다.
        people = [ i for i in range(1, n+1)] # 0층을 표시
        for b in range(k): # 층 만큼 반복한다.
            for j in range(1,n):  # j라는 변수에 1부터 입력받은 호수 만큼 순서대로 대입해서 반복
                people[j] += people[j-1]  # j 즉 1부터 시작이니 리스트에 1번 칸과 리스트의 1번칸 보다 한칸 앞에있는 숫자를 더해서 1번칸에 대입
        print(people[-1]) # 리스트 맨 뒤에 있는 숫자를 출력

    문제는 백준에서 확인하도록 하고 코드는 위와 같다.

     

    나도 여러 블로그들 참고해서 해석했다.

    주석으로 설명을 적긴했지만 다시 설명하자면

     

    T = int(input()) 
    for a in range(T): 
        k = int(input())
        n = int(input()) 
        people = [ i for i in range(1, n+1)]

    T값은 몇번 계산해서 확인할지 즉 프로그램을 몇번 사용할건지 적는거다.

    그리고 for문에서 range라는 숫자로 T(입력받은 반복할 횟수)만큼 반복을 해준다.

     

    k라는 층 변수를 입력받는다.

    n이라는 호수에 대한 변수를 입력받는다.

     

    people이라는 변수에 리스트 형식으로 1부터 입력받은 호수만큼 for문으로 반복해서 넣어준다.

    여기서 n+1을 하는 이유는 range는 왼쪽 이상 오른쪽 미만의 수를 넣어주기 때문에 올바른 값을 맞춰주기 위해 +1을 해준다.

     

        for b in range(k): 
            for j in range(1,n):  
                people[j] += people[j-1]  
        print(people[-1])

    for문을 통해서 층 수 만큼 반복을 해준다.

    range를 통해서 1부터 호수-1 만큼의 숫자를 순서대로 넣어서 반복을 해준다.

    people j 즉 현재 반복되어 지고 있는 번수의 리스트의 값(예를 들어 1이라고 가정)과 그 현재 번수의 한칸 앞의 숫자를 더해준다.( 1일 경우 0번째 리스트 값)

     

    print(people[-1])의 뜻은 그냥 리스트 맨 뒤값을 출력한다. 우리는 최종 값만 알면 되기 때문에 맨 뒤 숫자만 출력해도 된다.

    (맨 뒤숫자가 우리가 지정한 층의 호수이기 때문에 그 값이 우리가 데리고 살아야할 최종 인원이 된다.)

     

    사실 해석이 살짝 애매하게 하긴 했지만 내가 다시 보았을 때 이해를 하기 위해서 적은거라 설명이 불친절하다.

     

    댓글