https://www.acmicpc.net/problem/23971
23971번: ZOAC 4
i행 j열 자리를 (i, j)라고 할 때, (1,1)에 참가자가 앉은 경우 다른 참가자는 (1,2), (2,1), (2,2) 자리를 제외한 나머지 자리에 앉을 수 있다. (2,2)의 경우는 (1,1)과 행 번호 및 열 번호의 차가 1보다 크
www.acmicpc.net
이번 문제는 23971번_ZOAC 4 문제로 DP를 이용하여 풀이가 가능합니다.
* 물론 완전탐색을 이용한 dfs등으로도 풀이는 가능하지만, 메모리나 시간 초과가 발생합니다.
입력 사항 -
한줄에 테이블의 행,렬,행간격,열간격이 H,W,N,M형태로 공백으로 구분되어 주어진다. (0 < H,W,N,M ≤ 50,000)
출력 사항 -
강의실이 수용할 수 있는 최대 인원 수를 출력한다.
주의 사항 -
다이나믹프로그래밍 방식으로 풀이 할 것이기에 코드를 먼저 짜기보다는 점화식을 먼저 구해야합니다.
풀이 방식 -
행 간격에 앉을 수 있는 인원은 행 간격보다 커야 된다고 하였으니 행간격 초과로 계산하여
행의길의 / 행간격+1 이 되며 열간격도 마찬가지로 계산하여 열의길의 / 열간격+1이 됩니다.
행에 앉을 수 있는 인원 = 행의길의 / 행간격+1
열에 앉을 수 있는 인원 = 열의길의 / 열간격+1
위와 같이 구할 수 있으며, 나누었을때 소수점 자리는 올림하면 되기에 아래와 같은 로직으로 풀이 됩니다.
로직 -
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
double h = Double.parseDouble(st.nextToken());
double w = Double.parseDouble(st.nextToken());
double n = Double.parseDouble(st.nextToken());
double m = Double.parseDouble(st.nextToken());
int x = (int) Math.ceil(h/(n+1));
int y = (int) Math.ceil(w/(m+1));
System.out.println(x*y);
}
}
'CodingTest' 카테고리의 다른 글
백준_2292번_벌집_자바 (0) | 2024.02.26 |
---|---|
백준_5073번_삼각형과 세 변_자바 (3) | 2024.02.26 |
백준_1436번_영화감독 숌_자바 (0) | 2024.02.09 |
백준_1012번_유기농 배추_자바 (0) | 2024.02.03 |
백준_15649번_N과 M (1)_자바 (1) | 2024.02.01 |