[백준/Python] 23971번 : ZOAC 4

문제

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

예제

풀이

첫 시도에서는 단순하게 2차원 배열을 생성하여 좌표를 찍어 문제를 풀어내려 했는데, input 값이 최대 50,000으로 크다고 판단되어서 다른 방법을 고민하게 되었다.

내가 생각한 풀이 방법은 다음과 같다.

  1. 가로로 한줄에 앉을 수 있는 인원을 구하는데, 배열을 선언하지 않고 포인터 변수를 통해 카운팅한다.

  2. 가로에 앉는 인원을 구했으면, 세로로 총 몇명이 앉을 수 있는지를 구한다.

따라서 첫번째로 가로에 앉을 수 있는 인원의 수를 구한 뒤, 세로를 기준으로 몇 줄이 사람들이 앉는 줄인지를 구했다.

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

x = 0
y = 0
current_x = 0
current_y = 0

# 가로로 앉을 수 있는 인원의 총합 : x
while current_x < W:
    x += 1
    current_x += (M+1)

# 세로로 앉을 수 있는 줄마다 x값 더해주기
while current_y < H:
    y += x
    current_y += (N+1)

print(y)

후기

찾아보니 수학적 규칙을 찾아 math.ceil()을 활용하여 반올림한 값을 사용하는 풀이가 대부분인 것 같다. 수학적인 규칙을 찾지 못하더라도 방법을 찾아 구현한 것에 의의를 두자..