알고리즘/알고리즘_백준

[Python][백준] 23971. ZOAC 4

Jerry_K 2024. 6. 27. 11:47

링크🔗

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


 

🗒️파이썬 코드 풀이

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

cnt_M = cnt_N = 0
n_M = n_N = 1 

while True: 
    cnt_M += 1
    n_M += (M+1)
    if W < n_M :
        break

while True: 
    cnt_N += 1
    n_N += (N+1)
    if H < n_N :
        break

print(cnt_M*cnt_N)

 

1.cnt_M, cnt_N 은 배치 가능한 수를 카운트 한 값이다.

 

2. n_M, n_N은  M과 N 씩 누적해서 띄워진 값이다.

 

3. while문에서 if문의 조건이 만족 할 때 까지 돌린 후 cnt_N,과 cnt_M을 추출해서 곱한다.

 

 

📌  문제 코멘트

처음에 이 문제를 보고 ni,nj 방식을 쓸까도 고민을 했지만, 그다지 어려운 문제는 아니였다.

(사실 변수에 대해 크게 고민하지는 않았다...)

 

참고로 math 라이브러리에서 ceil을 통해 하는 법도 있다. (이거는 두줄에 끝!)

 


📚문제

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

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

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

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

입력

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

출력

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

예제 입력 1 복사

5 4 1 1

예제 출력 1 복사

6

i행 j열 자리를 (i, j)라고 할 때, (1,1)에 참가자가 앉은 경우 다른 참가자는 (1,2), (2,1), (2,2) 자리를 제외한 나머지 자리에 앉을 수 있다.

(2,2)의 경우는 (1,1)과 행 번호 및 열 번호의 차가 1보다 크지 않으므로 앉을 수 없다.