백준 문제들을 구경하다가 "대기업 코테에서 나오는 유형 모음"이라고 인기 있는 문제집이 있어서 취미 삼아 난이도가 낮은 것부터 순서대로 풀어볼 생각이 들었다.
백준 23971번 ZOAC 4
문제분석
난이도가 낮아서 그런지 정말 쉬운 문제였다. 문제설명은 W,H순으로 말하다가 입력받을 때는 H, W순으로 받는다거나 굳이 이해하기 쉽게 설명할 수 있는데 억지로 꼬아서 말하려고 하는 것 같아 억지로 만든 문제구나 싶었다.
내가 이해하기 쉽게 정리한 내용은 아래와 같다.
1. H행 W열로 이루어진 테이블이 존재한다.
2. 테이블에는 각 참가자들간 세로로(행) N칸, 가로로(열) M칸 이상 떨어져 앉아야 한다.
3. 최대 앉을 수 있는 참가자는 몇명인가.
문제 풀이
문제를 보고 푸는 데까지 1분 이채 걸리지 않았다. 순서대로 생각하면 금방 풀 수 있다.
1. (1,1)은 고정으로 사람을 앉고, 세로나 가로로 거리 두기를 진행하고 앉아야 한다.
예를 들어, 4(H) x4(W)로 테이블이 존재하면 가로로 3칸 세로로 3칸 내에 다른 참가자가 존재할 수 있다.
2. 참가자가 앉는 자리와 거리 두기를하나의 덩어리로 간주한다.
예를 들어, 가로로 1칸, 세로로 2칸의 거리 두기가 필요하다면, 참가자는 총 가로로 2칸, 세로로 3칸을 차지한다.
3. 첫 번째를 제외한 존재할 수 있는 참가자의 수는
세로 (H - 1) / (N + 1), 가로 (W - 1) / (M + 1) 다.
4. 첫 번째에서 제외한 (1,1)를 더함으로써 하나의 열 또는 하나의 행에 최대로 앉을 수 있는 참가자의 수를 구할 수 있다.
세로 (H - 1) / (N + 1) + 1, 가로 (W - 1) / (M + 1) + 1 다.
5. 하나의 열에 앉을 수 있는 최대 참가자 x 하나의 행에 앉을 수 있는 최대 참가자 = 강의실에 앉을 수 있는 최대 참가자 수다.
최대 참가자 수 = ((H - 1) / (N + 1) + 1) x ((W - 1) / (M + 1) + 1)
계산 식을 위와 같이 구했으니 그대로 코드로 옮겨주면 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 23971번 - ZOAC 4
public class Main {
public static void main(String[] args) throws IOException {
// 입력을 효율적으로 처리하기 위해 BufferedReader를 사용하여 입력을 받음
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// [행, 열, 세로공백, 가로공백]을 한줄로 입력 받음
StringTokenizer str = new StringTokenizer(br.readLine());
int row = Integer.parseInt(str.nextToken()); // 테이블 행 H
int column = Integer.parseInt(str.nextToken()); // 테이블 열 W
int rowGap = Integer.parseInt(str.nextToken()); // 참가자 세로 공백 N
int columnGap = Integer.parseInt(str.nextToken()); // 참가자 가로 공백 M
// 최대 참가자 수 구하는 공식
int result = ((row-1)/(rowGap+1)+1) * ((column-1)/(columnGap+1)+1);
// 답 출력
System.out.println(result);
}
}
마무리
앞선 문제들이 로직을 생각하는데 많은 시간이 필요했던 거에 비해 해당 문제는 너무나도 쉽게 풀 수 있었다. 마치 고등학생에게 초등학교 문제를 풀라는 느낌이랄까?? 알고리즘 문제라기 보단... 그냥 수학문제 느낌이 강했다. 이런 쉬운 문제는.. 풀어도 시간 들여 문제 풀이를 작성해야 하나 싶었지만 나에게는 쉬워도 어려운 사람이 있을 수 있다는 생각에 작성하게 되었다.
'코딩테스트 > Java' 카테고리의 다른 글
[백준 Beakjoon 1157번] 단어 공부 - 문제 해석 및 Java풀이 (0) | 2024.09.05 |
---|---|
[백준 Beakjoon 12865번] 평범한 배낭 - 문제 해석 및 Java풀이 (1) | 2024.08.28 |
[백준 Beakjoon 3190번] 뱀 - 문제 해석 및 Java풀이 (1) | 2024.08.23 |