백준 ZOAC 4 | 브론즈 3

Bluewave·2025년 6월 9일

코테공부_java

목록 보기
71/99
post-thumbnail

🍰 문제 바로가기

나의 코드

package source_code;

import java.util.Scanner;

// 테이블: W개씩 H행
// 모든 참가자는 세로로 N or 가로로 M칸 이상 비우고 앉아야 함
// = 다른 참가자와 세로줄 번호의 차가 N보다 크거나 가로줄 번호 차가 M보다 큰 곳에만 앉을 수 있음
// => 강의실이 거리두기 수칙을 지키면서 최대 몇 명을 수용할 수 있는가?

// 입력: H(세로 길이), W(가로 길이), N(세로 띄움), M(가로 띄움)
// 출력: 수용 가능한 최대 인원 수 

// 1. H / (1 + N) => 세로로 들어가는 최대 사람 수 
// 2. W / (1 + M) => 가로로 들어가는 최대 사람 수
// 3. 1번 * 2번 => 최대 수용 가능 인원 수

public class B_B3_23971_ZOAC {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int height = sc.nextInt();
		int width = sc.nextInt();
		int spaceNum_height = sc.nextInt();
		int spaceNum_width = sc.nextInt();
		
		// 1. 세로로 들어가는 최대 사람 수
		int heightNumCal1 = height % (1 + spaceNum_height);
		int heightNumCal2 = height / (1 + spaceNum_height);
		
		int maxHeightNum = 0;
		if(heightNumCal1 == 0) { 
			maxHeightNum = heightNumCal2;
		}else {
			maxHeightNum = heightNumCal2 + 1;
		}
		
		// 2. 가로로 들어가는 최대 사람 수 
		int maxWidthNum = 0;
		int widthNumCal1 = width % (1 + spaceNum_width);
		int widthNumCal2 = width / (1 + spaceNum_width);
		
		if(widthNumCal1 == 0) { 
			maxWidthNum = widthNumCal2;
		}else {
			maxWidthNum = widthNumCal2 + 1;
		}

		// 3. 최대 수용 가능 인원 수
		int maxNum = maxHeightNum * maxWidthNum;
		
		//System.out.println("maxHeightNum: " + maxHeightNum + " " + "maxWidthNum: " + maxWidthNum);
		
		System.out.println(maxNum);
	}

}

거의 반 년만의 코테 문제라 브론즈부터 시작해봤다.
자바도 반 년만에 쓰는거라 문법도 어색하여 그런지 쓸데없이 변수를 너무 많이 선언한 느낌이다.
코틀린으로 코드를 짤 때는 간단하게 표현되던 문법들이 자바에서는 허용되지 않는다는 게 생각보다 꽤 불편했다.
또한 반 년전 A형 준비를 하면서 강사님께서 강조하셨던, 상단에 문제 요약과 풀이방법을 적고 변수는 꼭 의미를 부여하여 적으라는 말씀도 그대로 적용해보았다.


코드 피드백

  • 불필요한 조건문 제거 가능

    int maxHeightNum = (height + spaceNum_height) / (spaceNum_height + 1);
    int maxWidthNum = (width + spaceNum_width) / (spaceNum_width + 1);

    혹은 삼항 연산자 활용
    -> 코틀린에서는 변수 = 뒤에 if else를 붙이는게 가능해서 삼항 연산자를 잊고 있었다..

  • 변수명이 길지만 중복되고, 복잡함
    heightNumCal1, heightNumCal2 → heightMod, heightQuotient 정도로 표현 가능
    -> 단순 수 부여보다는 의미를 담을 것..!

  • 불필요한 if문 제거
    (height + N) / (N + 1)로 계산하면 따로 나머지를 따질 필요가 없다.


최종 개선 코드

import java.util.Scanner;

public class B_B3_23971_ZOAC {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int totalRows = sc.nextInt();            // 강의실 총 행 수 (H)
        int totalCols = sc.nextInt();            // 강의실 총 열 수 (W)
        int minRowSpacing = sc.nextInt();        // 세로 거리두기 간격 (N)
        int minColSpacing = sc.nextInt();        // 가로 거리두기 간격 (M)

        // (참가자 한 명 기준) 필요한 최소 행/열 간격 = 본인 + 띄워야 할 거리 => (간격 + 1)
        int maxRowsAvailable = (totalRows + minRowSpacing) / (minRowSpacing + 1);
        int maxColsAvailable = (totalCols + minColSpacing) / (minColSpacing + 1);

        int maxParticipants = maxRowsAvailable * maxColsAvailable;

        System.out.println(maxParticipants);
    }
}
profile
Developer's Logbook

0개의 댓글