백준 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 |