백준 정보섬의 대중교통

KIMYEONGJUN·2025년 12월 30일
post-thumbnail

문제

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

첫째 줄에 N,A,B가 공백으로 구분되어 주어진다.

버스에 더 먼저 탑승할 수 있으면 Bus, 지하철에 더 먼저 탑승할 수 있으면 Subway, 버스와 지하철에 탑승하게 되는 시간이 동일하면 Anything을 출력한다.

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

입력 값 읽기 및 변환
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.in은 콘솔로부터 바이트 스트림을 받는다. 
이를 InputStreamReader로 감싸 문자 스트림으로 만들고, 다시 BufferedReader로 감싸 효율적으로 텍스트 한 줄을 읽을 준비를 한다.
StringTokenizer st = new StringTokenizer(br.readLine());
br.readLine()을 통해 사용자로부터 입력받은 한 줄의 문자열(예: "10 5 15")을 읽어온다.
이 문자열을 StringTokenizer 객체 st에 전달하여 공백(기본 구분자)을 기준으로 "10", "5", "15"와 같이 토큰들로 분리한다.
int N = Integer.parseInt(st.nextToken());
st.nextToken()을 호출하여 분리된 첫 번째 토큰("10")을 가져온다.
Integer.parseInt()를 이용해 이 문자열("10")을 정수형 int 값(10)으로 변환하여 변수 N에 저장한다.
N은 찬솔이 지하철역까지 걸어가는 데 걸리는 시간이다.
마찬가지로 A와 B 변수에도 각각 버스 도착까지의 시간과 지하철 도착까지의 시간이 정수형으로 저장된다.
A:버스는 A분 후에 찬솔님이 탑승할 수 있다.
B:지하철은 N분 걸어가든 말든 최종적으로 B분 후에 탑승할 수 있다.
문제의 조건 N <= B에 따라, 지하철 역에 미리 도착하더라도 지하철은 B분이 되어야 오기 때문이다.
대중교통 선택 로직
if(A < B):
버스가 도착하는 시간 A가 지하철 도착 시간 B보다 짧다면, 버스가 더 빨리 온다.
이 경우 System.out.println("Bus");를 통해 "Bus"를 출력한다. 
찬솔은 버스를 타는 것이 유리하다.
else if (A - N == B - N) 이 조건은 A - N과 B - N이 같다는 것인데, 양변에서 - N이 상쇄되므로, 결국 A == B와 동일한 조건이다.
버스가 도착하는 시간 A와 지하철이 도착하는 시간 B가 서로 같다면, 어느 교통수단을 이용하든 걸리는 시간은 같다.
이 경우 System.out.println("Anything");를 통해 "Anything"을 출력한다.
else:
위의 두 조건 (A < B와 A == B) 모두 해당하지 않는 경우는, 오직 A > B인 경우뿐이다. 
즉, 지하철이 버스보다 더 빨리 도착하는 상황이다.
이 경우 System.out.println("Subway");를 통해 "Subway"를 출력한다. 
찬솔은 지하철을 타는 것이 유리하다.
자원 해제
BufferedReader는 시스템 자원을 사용하므로, 더 이상 필요 없을 때는 close() 메서드를 호출하여 자원을 반환하는 것이 좋다.

코드로 구현

package baekjoon.baekjoon_31;

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

// 백준 28113번 문제
public class Main1252 {
    public static void main(String[] args) throws IOException {
        // 표준 입력(콘솔)에서 한 줄씩 읽기 위한 설정
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 읽어온 줄을 공백 기준으로 나누기
        StringTokenizer st = new StringTokenizer(br.readLine());

        // N: 지하철역까지 걸어가는 시간
        int N = Integer.parseInt(st.nextToken());
        // A: 버스 도착까지의 시간
        int A = Integer.parseInt(st.nextToken());
        // B: 지하철 도착까지의 시간 (N을 고려하더라도 지하철 탑승 시간은 B로 결정됨)
        int B = Integer.parseInt(st.nextToken());

        // 버스(A)와 지하철(B) 중 더 빠른 것을 판단
        if (A < B) {
            System.out.println("Bus"); // 버스가 더 빠르면 Bus
        }
        // A - N == B - N 은 A == B 와 같습니다. (수학적으로 N은 상쇄)
        else if (A == B) { // 두 교통수단 시간이 같으면 Anything
            System.out.println("Anything");
        }
        else { // 버스보다 지하철이 더 빠르면 Subway (A > B인 경우)
            System.out.println("Subway");
        }

        br.close(); // BufferedReader 자원 해제
    }
}

마무리

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

profile
Junior backend developer

0개의 댓글