알고리즘 단련장/소프티어

[소프티어] GBC 레벨2 자바 풀이

dcho 2024. 10. 30. 22:54
SMALL

https://softeer.ai/practice/6270

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

 

 

 

현대 스러운 문제를 냈다. 

글로벌 비즈니스 센터(GBC, Global Business Center)는 현대자동차그룹 통합 사옥에서 구간중 제한 속도 벗어나는것중 가장 큰것을 찾는 것이다.

정해진 구간과 제한 속도를 주고 검사하는 구간과 속도를 준다.

처음에 접근 했을땐 반복을 일일이 돌아야 하나 싶었지만
제한 속도 검사, 구간 실태 조사를 해서 i, j를 적절하게 움직여주면 될 것이라는 검증을 마치고 바로 코드를 쳤다.

정답 코드

import java.io.*;
import java.util.*;

public class Main {

    private static int[] nLength;
    private static int[] nSpeed;
    private static int[] mLength;
    private static int[] mSpeed;
    private static int dap = 0;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        nLength = new int[n];
        nSpeed = new int[n];
        mLength = new int[m];
        mSpeed = new int[m];

        // n 관련 입력 받기
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            nLength[i] = Integer.parseInt(st.nextToken());
            nSpeed[i] = Integer.parseInt(st.nextToken());
        }

        // m 관련 입력 받기
        for (int i = 0; i < m; i++) {
            st = new StringTokenizer(br.readLine());
            mLength[i] = Integer.parseInt(st.nextToken());
            mSpeed[i] = Integer.parseInt(st.nextToken());
        }

        int i = 0;
        int j = 0;

        while (i < n && j < n) {
            // 제한 속도 검사
            int gapSpeed = mSpeed[i] - nSpeed[j];
            if (gapSpeed > 0) {
                dap = Math.max(dap, gapSpeed);
            }
            // 구간 실태 조사
            int gapLength = mLength[i] - nLength[j];
            if (gapLength > 0) {
                mLength[i] = gapLength;
                j++;
            }
            else if (gapLength < 0) {
                nLength[j] = Math.abs(gapLength);
                i++;
            }
            else {
                i++;
                j++;
            }
        }

        bw.write(dap + "\n");

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

런타임 에러가 나서 당황했다. 다음부턴 조건을 제대로 확인하고 걸어줘야겠다.