백준 경제학과 정원영

KIMYEONGJUN·2024년 11월 13일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 테스트 케이스의 개수 T가 주어진다.
각 테스트 케이스는 빈 줄로 구분되며,
다음과 같이 구성되어 있다.
테스트 케이스의 첫째 줄에는 C언어 수강생의 수 N과 경제학 원론 수강생의 수 M이 주어진다.
둘째 줄에는 N+M 개의 숫자가 공백으로 구분되어 주어진다.
처음 N개의 숫자는 C언어 수강생의 IQ이며,
다음 M개의 숫자는 경제학 원론 수강생의 IQ이다.
N과 M은 200,000보다 작거나 같은 자연수이고,
N은 2보다 크거나 같다.
IQ는 100,000보다 작거나 같은 자연수이다.

각 테스트 케이스의 정답을 한 줄에 하나씩 차례대로 출력한다.

내가 이 문제를 보고 생각해본 부분

테스트 케이스 수를 읽고,
각 케이스에 대해 C언어 및 경제학 수강생 수를 입력받는다.
IQ 데이터 수집:
C언어 수강생의 IQ 값을 배열에 저장하고,
총합을 계산한다.
이어서 경제학 수강생의 IQ 총합도 계산한다.
조건 확인:
C언어 평균 IQ보다 낮고,
경제학 평균 IQ보다 높은 수강생을 찾아 조건을 만족하는 수를 센다.
각 테스트 케이스의 조건을 만족하는 수강생 수를 출력한다.
이 문제는 C언어 수강생이 경제학을 수강할 때 평균 IQ를 올릴 수 있는지를 판단하는 문제이다.

코드로 구현

package baekjoon.baekjoon_24;

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

// 백준 2546번 문제
public class Main836 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine()); // 테스트 케이스의 개수를 입력받음

        for (int i = 0; i < T; i++) { // 각 테스트 케이스에 대해 처리
            br.readLine(); // 빈 줄 스킵
            StringTokenizer st = new StringTokenizer(br.readLine()); // 첫 번째 줄에서 C언어 수강생 수와 경제학 수강생 수를 읽음
            int cLanguageCount = Integer.parseInt(st.nextToken()); // C언어 수강생 수
            int economicsCount = Integer.parseInt(st.nextToken()); // 경제학 수강생 수
            long[] cLanguageIQs = new long[cLanguageCount]; // C언어 수강생의 IQ를 저장할 배열

            long totalCLanguageIQ = 0; // C언어 수강생 IQ의 총합
            long totalEconomicsIQ = 0; // 경제학 수강생 IQ의 총합

            st = new StringTokenizer(br.readLine());  // C언어 수강생 IQ를 읽고 총합을 계산
            for(int j = 0; j < cLanguageCount; j++) {
                cLanguageIQs[j] = Long.parseLong(st.nextToken()); // IQ 값 저장
                totalCLanguageIQ += cLanguageIQs[j]; // 총합에 더하기
            }

            st = new StringTokenizer(br.readLine()); // 경제학 수강생 IQ를 읽고 총합을 계산
            for(int k = 0; k < economicsCount; k++) {
                totalEconomicsIQ += Long.parseLong(st.nextToken()); // 총합에 더하기
            }

            int eligibleCount = 0; // 평균 IQ를 올려줄 수 있는 학생 수를 세기 위한 변수

            for(int j = 0; j < cLanguageCount; j++) { // C언어 수강생 중에서 조건을 만족하는 학생을 찾기
                // C언어 평균 IQ보다 낮고, 경제학 평균 IQ보다 높은 경우
                if(totalCLanguageIQ > cLanguageIQs[j] * cLanguageCount &&
                        totalEconomicsIQ < cLanguageIQs[j] * economicsCount) {
                    eligibleCount++; // 조건을 만족하는 학생 수 증가
                }
            }

            System.out.println(eligibleCount); // 조건을 만족하는 학생 수를 출력
        }
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글