[백준] 10818번 : 최소,최대 - JAVA(자바)

Life is ninanino·2022년 10월 9일
0

[백준] JAVA

목록 보기
17/37
post-thumbnail

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


아래는 오답 코드이다

package 백준;// @ author ninaaano

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

public class b_10818 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] arr = new int[n];
        int max = 0;
        int min = 0;

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

        for (int i = 0; i < arr.length; i++) {
            int num = Integer.parseInt(st.nextToken());
            arr[i] = num;

            min = arr[0];
            if (min > arr[i]) {
                min = arr[i];
            }
            max = arr[0];
            if (max < arr[i]) {
                max = arr[i];
            }
        }
        System.out.print(min + " " + max);
    }
}


최솟값은 잘 담기는데 최댓값은 제대로 담기지 않았다. 이유가 뭘까?

그래서 for문안에 재선언한 내용을 삭제하고
min,max에 0이아닌 arr[0]을 넣어 작성했다.

package 백준;// @ author ninaaano

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

public class b_10818 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] arr = new int[n];
        int max = arr[0];
        int min = arr[0];

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

        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
            br.close();

            if (min > arr[i]) {
                min = arr[i];
            }
            if (max < arr[i]) {
                max = arr[i];
            }
        }
        System.out.print(min + " " + max);
    }
}

이렇게 하니 min의 출력값이 계속 0이 나왔다.

이유가 뭘까?
디버그를 돌려봐도 이해가 되질 않았다.
max값은 계속 갱신이 되는데 min값은 0에서 움직이지 않았다.
나는 선언은 항상 위에 해줘야 된다고 생각했는데
코드는 순서를 따라 내려간다
그래서 int max와 min의 선언을 입력한 값이 배열에 다 넣어진 후에 해줬다.

++ 정답코드

package 백준;// @ author ninaaano

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

public class b_10818 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        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());
            br.close();
        }
        int max = arr[0];
        int min = arr[0];

        for(int i=0; i<arr.length; i++) {
            if (min > arr[i]) {
                min = arr[i];
            }
            if (max < arr[i]) {
                max = arr[i];
            }
        }

        System.out.print(min + " " + max);
    }
}

이렇게 하니 min과 max가 정상적으로 출력이 되었다.
사실 sort를 써서 정렬한 후에 맨 앞과 맨 뒤에 값을 출력하는 방법도 있다

++ Arrays.sort 이용

package 백준;// @ author ninaaano

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

public class b_10818 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        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());
            br.close();
        }
        Arrays.sort(arr);
        System.out.println(arr[0]+" "+arr[n-1]);
    }
}

간단하게 해결할 수 있다.
for문 대신 while문을 사용하여 배열의 값을 받을 수도 있다

int index=0;

while(st.hasMoreTokens()) {
arr[index] = Integer.parseInt(st.nextToken());
index++;
}

기초적인 문제임에도 불구하고 배열의 값이 제대로 출력되지 않아 한참 헤맸다...ㅠㅠ

profile
백엔드 프로그래밍을 공부하고 있습니다. AWS, 클라우드 환경에 대해 관심이 많습니다.

0개의 댓글