백준 줄세우기

KIMYEONGJUN·2025년 3월 30일
0
post-thumbnail

문제

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

첫 줄에 테스트 케이스의 수 P (1 ≤ P ≤ 1000) 가 주어진다.
각 테스트 케이스는 테스트 케이스 번호 T와 20개의 양의 정수가 공백으로 구분되어 주어진다.
20개의 정수는 줄서기를 할 아이들의 키를 줄서기 차례의 순서대로 밀리미터 단위로 나타낸 것이다.
모든 테스트 케이스는 독립적이다.

각각의 테스트 케이스에 대해 테스트 케이스의 번호와 학생들이 뒤로 물러난 걸음 수의 총합을 공백으로 구분하여 출력한다.

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

입력 처리: BufferedReader를 사용하여 입력을 받는다.
첫 줄에 테스트 케이스 수를 읽고, 각 테스트 케이스마다 키를 읽는다.
줄서기 시뮬레이션: calculateStepsBack 메서드는 학생들이 줄을 서는 과정을 시뮬레이션한다.
각 학생의 키를 확인하고, 그 학생보다 큰 학생이 앞에 있는 경우, 그 만큼 학생들이 뒤로 물러나는 횟수를 계산한다.
출력 처리: 결과는 BufferedWriter를 사용하여 한 번에 출력한다.

코드로 구현

package baekjoon.baekjoon_27;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;

// 백준 10431번 문제
public class Main976 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new java.io.InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int P = Integer.parseInt(br.readLine().trim());

        for(int i = 0; i < P; i++) {
            String[] input = br.readLine().trim().split(" ");
            int T = Integer.parseInt(input[0]);
            int[] heights = new int[20];
            for(int j = 0; j < 20; j++) {
                heights[j] = Integer.parseInt(input[j + 1]);
            }
            int totalStepsBack = calculateStepsBack(heights);
            bw.write(T + " " + totalStepsBack + "\n");
        }

        bw.flush();
        bw.close();
        br.close();
    }

    private static int calculateStepsBack(int[] heights) {
        List<Integer> line = new ArrayList<>();
        int stepsBack = 0;

        for(int height : heights) {
            int position = 0;
            while(position < line.size() && line.get(position) < height) {
                position++;
            }

            // 현재 키보다 큰 학생이 있는지 확인
            if(position < line.size()) {
                // 학생이 뒤로 물러나는 횟수
                stepsBack += line.size() - position;
            }

            line.add(position, height);
        }

        return stepsBack;
    }
}

마무리

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

profile
Junior backend developer

0개의 댓글

관련 채용 정보