[BOJ] 23971. ZOAC 4

Jimeaning·2023년 11월 10일
0

코딩테스트

목록 보기
131/143

Python3

문제

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

키워드

  • 수학
  • 사칙연산

문제 풀이

문제 요구사항

한 명씩 앉을 수 있는 테이블이 행마다 W개씩 H행에 걸쳐 있을 때, 모든 참가자는 세로로 N칸 또는 가로로 M칸 이상 비우고 앉아야 한다. 즉, 다른 모든 참가자와 세로줄 번호의 차가 N보다 크거나 가로줄 번호의 차가 M보다 큰 곳에만 앉을 수 있다.

거리두기 수칙을 지키면서 최대 몇 명을 수용할 수 있는지 구해보자.

변수 및 함수 설명

H, W, N, M : 강의실의 크기와 비워야 하는 칸 수
(0 < H, W, N, M ≤ 50,000)
ans : 최대 수용 인원

풀이

H, W, N, M이 각각 5, 4, 1, 1이라고 할 때, 아래와 같이 앉을 수 있다.

가로 세로 모두 한 자리를 반드시 비워야 하므로 한 사람이 가로로 두 자리, 세로로 두 자리를 차지하는 것과 같다
=> 즉 한 사람 당 (N + 1), (M + 1) 자리를 차지하는 것이다.

최종 코드

h, w, n, m = map(int, input().split())

if h % (n + 1) != 0:
    if w % (m + 1) != 0:
        ans = (h // (n+1) + 1) * (w // (m+1) + 1)
    else:
        ans = (h // (n+1) + 1) * w // (m+1)
else:
    if w % (m + 1) != 0:
        ans = h // (n+1) * (w // (m+1) + 1)
    else:
        ans = h // (n+1) * w // (m+1)
        
print(ans)
profile
I mean

0개의 댓글