백준 10250 ACM호텔, 2775_부녀회장이 될테야 파이썬

2021. 11. 3. 01:33
import sys

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

for tc in range(T):
    H, W, N = map(int, sys.stdin.readline().split())
    room = N // H + 1
    floor = N % H
    # floor H층일 때 0이 되어버림. 그리고 room은 1호가 더 뒤로 밀려남.
    if floor == 0:
        floor = H
        room -= 1
    print(f"{floor}{room:02}")

아래 floor가 0으로 떨어지는 경우를 따로 처리해주지 않아서 틀렸었다.

W = 12, H = 6일 경우 floor == 0을 처리하지 않으면 6번째 손님 방이 002 이런식으로 출력된다.

 

import sys

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

for tc in range(T):
    k = int(sys.stdin.readline().rstrip())
    n = int(sys.stdin.readline().rstrip())
    apt = [[0] * 15 for _ in range(15)]
    apt[0] = [i for i in range(1, 16)]

    for floor in range(1, 15):
        for room in range(15):
            room_now = 0
            while room_now <= room:
                apt[floor][room] += apt[floor-1][room_now]
                room_now += 1

    print(apt[k][n-1])

수학 계산식으로 풀고싶었는데 생각이 안나서 크기가 작길래 2차원 배열로 각 아파트 입주민의 수를 호수마다 계산해서 미리 만들어두고 원하는 방을 출력하는 식으로 풀었다.

그래서 Python 으로 푼 사람 중에 공개로 해둔 사람 코드를 읽어봤는데 전혀 이해가 안됐다. 그래서 같이 공부하던 사람에게 물어보니까 파스칼의 삼각형으로 풀 수 있다는 걸 알게되었다.

파스칼의 삼각형은 이렇게 생겼다. 그래서 왼쪽으로 120도 돌리면 아파트 2차원 배열과 똑같이 생겼다. 

그리고 파스칼의 삼각형은 다음과 같이 콤비네이션을 통해 구해야한다.

공식은 위처럼 생겼다.

그리고 nCk + nC(k+1) = (n+1)C(k+1) 이다.

하아ㅠ 근데 왜 이게 

child = 1
mom = 1
for j in range(k+1):
	child *= (n+j)
	mom *= (j+1)

이렇게 되는지 모르겠다.ㅎㅎ,.,,ㅎ,ㅎ.ㅎ.ㅎ.ㅎ.ㅎㅎ..

'Dev > 알고리즘' 카테고리의 다른 글

2981 검문  (0) 2021.12.13
백준 2839 설탕배달 파이썬  (0) 2021.11.03
백준 1193_분수찾기 파이썬  (0) 2021.11.01
백준 1759 암호 만들기 파이썬  (0) 2021.09.25
백준 1158 요세푸스 파이썬  (0) 2021.09.25

BELATED ARTICLES

more