대기업 코테 유형

(백준/파이썬) [Bronze III] ZOAC 4 - 23971

난쟁이 개발자 2024. 9. 3. 15:25
반응형

[Bronze III] ZOAC 4 - 23971

문제 링크

성능 요약

메모리: 108080 KB, 시간: 92 ms

분류

사칙연산, 수학

제출 일자

2024년 8월 16일 02:56:21

문제 설명

2021년 12월, 네 번째로 개최된 ZOAC의 오프닝을 맡은 성우는 오프라인 대회를 대비하여 강의실을 예약하려고 한다.

강의실에서 대회를 치르려면 거리두기 수칙을 지켜야 한다!

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

논문과 과제에 시달리는 성우를 위해 강의실이 거리두기 수칙을 지키면서 최대 몇 명을 수용할 수 있는지 구해보자.

입력

H, W, N, M이 공백으로 구분되어 주어진다. (0 < H, W, N, M ≤ 50,000)

출력

강의실이 수용할 수 있는 최대 인원 수를 출력한다.

 

풀이

한 사람이 차지하는 자리의 크기를 N+1, M+1로 나타낼 수 있다. H : N+1 만큼의 비율만큼 세로로 자리를 차지하고 W : M+1 만큼 가로로 자리를 차지하기 때문에 이를 이용해서 수식을 작성하면 해결할 수 있는 문제이다.

여기서 딱 떨어지면 좋겠지만 딱 나누어 떨어지지 않을 경우, 무조건 사람이 앉을 수 있기 때문에 올림 처리를 통해서 수식을 구성해주자. 혹시나 math 라이브러리를 모르더라도 조건문 완성을 통해서 충분히 해결이 가능하다.

math 라이브러리를 사용한 풀이

더보기
import math

H, W, N, M = map(int, input().split())

row = math.ceil(H/(N+1))
col = math.ceil(W/(M+1))

ans = row * col
print(ans)

math.ceil 함수는 올림 함수이다.

조건문을 사용한 풀이

더보기
H, W, N, M = map(int, input().split())

row = H // (N + 1)
col = W // (M + 1)

if H % (N + 1) != 0 :
    row += 1
if W % (M + 1) != 0 :
    col += 1

ans = row * col
print(ans)
반응형