묠니르묘묘
꾸준히 성장하는 개발자스토리
묠니르묘묘
전체 방문자
오늘
어제
  • 분류 전체보기 (188)
    • 프로그래밍 (48)
      • 디자인패턴 (4)
      • 예외,에러 (4)
      • Java (29)
      • Kotlin (3)
      • React.js (4)
      • JavaScript (2)
      • Apache Kafka (2)
    • Spring (49)
      • Spring (21)
      • Spring Cloud (3)
      • JPA (25)
    • 코딩테스트 (31)
      • 알고리즘 (5)
      • Java - 백준 (26)
      • Java - 프로그래머스 (0)
    • AWS (7)
    • 데이터베이스 (6)
    • 개발 etc (23)
    • 도서 (5)
    • 회고록 (4)
    • 데브코스-데이터엔지니어링 (15)

인기 글

최근 글

hELLO · Designed By 정상우.
묠니르묘묘

꾸준히 성장하는 개발자스토리

[백준] 10818번 - Java(자바)
코딩테스트/Java - 백준

[백준] 10818번 - Java(자바)

2022. 1. 14. 15:18

백준 10818번 자바

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

 

10818번: 최소, 최대

첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

www.acmicpc.net

 

 


알고리즘

정수 N을 받는다. [ 1 ≤ N ≤ 1,000,000 ]

N개의 정수값를 공백으로 구분해서 받는다. [ -1,000,000 ≤ 정수값 ≤ 1,000,000 ]

받은 정수값에서 최소값과 최댓값을 출력한다.

 

 

1. 정수 N을 입력받는다.

2. 최댓값 = -1,000,000 , 최소값 = 1,000,000 초기화

3. N번 만큼 입력받는다.

    3-1. 최소값보다 작으면 대입

    3-2. 최댓값보다 크면 대입

4. 최소값, 최댓값 출력

 

 


풀이1

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

public class No_10818 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;

        int N = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine());
        int max = -1000000;
        int min = 1000000;
        int num;
        for (int i = 0; i < N; i++) {
            num = Integer.parseInt(st.nextToken());
            if (max < num)
                max = num;
            if (min > num)
                min = num;

        }
        sb.append(min).append(" ").append(max);
        System.out.println(sb);
    }
}

입력은 BufferedReader로 한 줄 입력받고, 공백을 구분으로 나눠야하기 때문에 StringTokenizer를 사용했다.

출력은 StringBuilder에 문자를 이어붙여 출력했다.

입력받는 정수의 범위는 -1,000,000 이상 1,000,000 이하이므로 거기에 맞춰서 최댓값과 최솟값을 설정하였고,

입력받을때마다 최댓값과 최솟값을 비교하였다.

 

 

풀이2

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

public class No_10818 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;

        int N = Integer.parseInt(br.readLine());
        int[] arr = new int[N];
        st = new StringTokenizer(br.readLine());

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

입력받는 정수값들을 배열에 넣어서 Arrays.sort로 오름차순 정렬을 통해 출력하였다.

오름차순이므로 arr[0]은 최솟값, arr[N-1]은 최댓값이다.

 

 

 

풀이3

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

public class No_10818 {
    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());
        StringTokenizer st = new StringTokenizer(br.readLine());

        int[] arr = new int[N];
        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }

        sb.append(Arrays.stream(arr).min().getAsInt()).append(" ").append(Arrays.stream(arr).max().getAsInt());
        System.out.println(sb);
    }
}

자바8의 스트림(Stream) API를 활용하였다.

Stream에서 제공하는 max()와 min()을 활용하기위해 IntStream으로 변환하여야한다.

그래서 Arrays.stream() 으로 기본 배열을 IntStream으로 변환하여 min()과 max()를 써서 결과를 Optional 객체로 반환하였다. 그 후 getAsInt()를 통해 int 값을 반환받는다. 이 때 반환값이 없는 경우 NoSuchElementException 예외가 발생할 수 있다.

 

 

 

풀이4

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;

        int N = Integer.parseInt(br.readLine());
        int[] arr = new int[N];
        st = new StringTokenizer(br.readLine());

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

        int max = arr[0];
        int min = arr[0];

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


        sb.append(min).append(" ").append(max);
        System.out.println(sb);
    }
}

풀이1 + 풀이2 느낌으로 풀었다.

배열에 값을 넣은 후 풀이 1번처럼 하나씩 꺼내 값을 비교해 넣는 방식이다.

 

저작자표시 (새창열림)

'코딩테스트 > Java - 백준' 카테고리의 다른 글

[백준] 2577번 - Java(자바)  (0) 2022.01.23
[백준] 2562번 - Java(자바)  (0) 2022.01.18
[백준] 1110번 - Java(자바)  (0) 2022.01.11
[백준] 10952번 - Java(자바)  (0) 2022.01.09
[백준] 2439번 - Java(자바)  (0) 2022.01.04
    '코딩테스트/Java - 백준' 카테고리의 다른 글
    • [백준] 2577번 - Java(자바)
    • [백준] 2562번 - Java(자바)
    • [백준] 1110번 - Java(자바)
    • [백준] 10952번 - Java(자바)
    묠니르묘묘
    묠니르묘묘

    티스토리툴바