본문 바로가기
코테 공부 🔥

[백준/자바] 23971: ZOAC 4

by 서니서닝 2023. 4. 14.
728x90

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

문제 요약 : 강의실에는 테이블이 W개씩 H행개 있다. 모든 참여자는 세로로 N칸, 가로로 M칸 띄우고 앉아야한다. 최대 몇명 수용할 수 있나요?

 

예제 입력 1

5 4 1 1

예제 출력 1

6

 

📌 풀이 1 )

N,M칸 띄우고 앉아야하기 때문에 각각에 N+1, M+1 값으로 나누어 주었다.

그러나, 몫만 가져오게 되면 5/2 의 경우나 4/2의 경우나 마찬가지로 2가 나오게된다. 그러나, 5/2에서 필요한 것은 3이기 때문에 ceil을 통해 올림을 해주었다.

 

그렇게 풀면 될 것 같아서 풀었지 정확히 왜 올림을 해야 답이 나오는지는 명확하지 않은 기분이였다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    public static void main(String[] args) throws IOException {
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int H = Integer.valueOf(st.nextToken());
        int W = Integer.valueOf(st.nextToken());
        int N = Integer.valueOf(st.nextToken());
        int M = Integer.valueOf(st.nextToken());
        
        int w = (int)Math.ceil((double) W/(M+1));
        int h = (int)Math.ceil((double) H/(N+1));
        
        System.out.print(w*h);
    }
}

 

📌 풀이 2 )

일단 제일앞자리에는 언제나 학생이 앉는다. 그래서 W와 H에는 -1을 해준다.

N,M칸 띄우고 앉아야하기 때문에 각각에 N+1, M+1 값으로 나누어 주었다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    
    public static void main(String[] args) throws IOException {
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int H = Integer.valueOf(st.nextToken());
        int W = Integer.valueOf(st.nextToken());
        int N = Integer.valueOf(st.nextToken());
        int M = Integer.valueOf(st.nextToken());
        
        int w = (W-1)/(M+1)+1;
        int h = (H-1)/(N+1)+1;
        
        System.out.print(w*h);
    }
}

728x90

댓글