본문 바로가기

백준

백준 18311 왕복 (JAVA)

https://www.acmicpc.net/problem/18311

 

18311번: 왕복

첫째 줄에 정수 N, K가 공백을 기준으로 구분되어 주어진다. (1≤N≤100,000) 단, K는 항상 왕복 거리보다 작은 양의 정수 혹은 0으로 주어진다. 둘째 줄에 1번부터 N번까지 각 코스의 길이가 공백을

www.acmicpc.net

코드

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

class Main {

    public static void main(String[] args) throws Exception {
        int[] course;
        int N;
        long K;
        boolean reverse = false;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        K = Long.valueOf(st.nextToken());

        course = new int[N + 1];

        st = new StringTokenizer(br.readLine());

        //입력
        for (int i = 0; i < N; i++) {
            course[i] = Integer.parseInt(st.nextToken());
        }

        //계산
        for (int i = 0; i < N; i++) {
            K -=course[i];
            if(K < 0){
                System.out.println(i+1);
                reverse = true;
                break;
            }
        }

        if(!reverse){
            for (int i = N - 1; i >= 0; i--) {
                K -= course[i];
                if(K < 0){
                    System.out.println(i+1);
                    break;
                }
            }
        }
    }

}

풀이

자꾸 numberFormatException이나 inputMismatch가 뜨고 해당 오류를 잡고 다시 돌리니 틀렸다고 나온 문제이다. 우선 오류가 뜬 이유는 입력값의 범위 때문인데. 입력으로 주어지는 N의 값 코스의 길이는 50000이하이므로 정수로 받아도 상관이 없지만 문제는 K값에서 최대 50억까지 받아야 할 필요하 있다. 그러므로 정수형으로 받을시 오류가 발생한다.

그리고 문제에서 달리기 선수가 달리는 길이는 왕복거리보다 작은 값이라는 조건덕에 단순히 1부터 N까지 반복문 하나와 N부터 1까지 가는 반복문으로 해결 가능하다.

'백준' 카테고리의 다른 글

백준 5766 할아버지는 유명해!(JAVA)  (0) 2022.08.17
백준 2729 이진수 덧셈(JAVA)  (0) 2022.08.17
백준 1316 그룹 단어 체커 (JAVA)  (0) 2022.08.15
백준 1316 그룹 단어 체커(JAVA)  (0) 2022.08.15
백준 16719 ZOAC(JAVA)  (0) 2022.08.15