티스토리 뷰

반응형

백준 문제 보기

두 가지 방법을 이용해 풀어보겠다.

 

 

첫 번째 풀이

결과를 먼저 말하자면 사실상 시간초과가 났었던 코드이다.

 

먼저 코드는 다음과 같다.

 

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

public class Q10818 {
    public static void main(String[] args) throws IOException {
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int N = Integer.parseInt(br.readLine());
        int min = 1000000;
        int max = -1000000;
        int arr[] = new int[N];

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
            if (arr[i] > max) {
                max = arr[i];
            }
            if (arr[i] < min) {
                min = arr[i];
            }
        }
        System.out.println(min).append(" ").append(max);
    }
}

코드를 간단히 설명하면

BufferedReader를 통해 N을 입력받고,

N번만큼 for문을 돌리며

StringTokenizer를 이용해 공백 단위로 숫자를 분리해서

arr에 삽입한다.

 

삽입하면서 if문의 조건을 통해 max,min을 정하고

출력한다.

 

 

문제 자체가 그리 어렵지 않아서 당연히 바로 풀 수 있을 줄 알았는데

웬걸,, 시간 초과가 떴다. 

 

내가 생각했을 때

for문 한번 정도 돌면서 

StringTokenizer를 이용해서 공백 단위로 구분해 배열에 집어 넣는 과정은

무조건 한 번은 해야한다고 생각했다.

 

그래서 max, min 변수를 경계값으로 넣고

매번 배열에 값을 삽입하면서

if문을 통해 조건 비교를 해서 min,max을 출력 하는 부분을 수정해야겠다고 생각했다.

 

 

그렇게 해서 생각한 방법이 '두 번째 풀이'이다!!

바로 다음을 보자.

 


 

두 번째 풀이

위에서 말한 min,max을 찾기 위해

arr를 정렬시키면 min,max을 알 수 있지 않을까..? 라는 생각이 들었다.

 

바로 코드를 보자.

 

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

public class Q10818 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int N = Integer.parseInt(br.readLine());
        int arr[] = new int[N];

        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(arr);
        System.out.println(sb.append(arr[0]).append(" ").append(arr[N-1]));
    }
}

전반적인 방식은 위의 코드와 동일하고

min,max을 구하는 방법이

Arrays.sort(arr); 를 이용하여

배열을 정렬한 후 배열의 첫번째와 마지막 값을 출력하면된다.

 


실행결과

위에서 말했다 싶이 풀이1은 시간 초과 코드이므로

풀이2의 결과만 첨부하겠다.

 

 

 


필자도 시간초과가 났던 문제였지만(;;)

사실 그리 어려운 문제는 아니었다.

문제를 보다 이해가 안되거나 설명이 이상한 부분이 있으면 댓글을 활용해주길 바란다.

반응형