[Java] 최소, 최대 (백준 10818번)

minjung·2022년 11월 26일
0

📖문제

N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.

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

✏️내 풀이

  1. 정수의 개수 N을 입력받는다.
  2. Integer 타입의 List를 만들고
  3. 정수 N개를 입력받아서, 공백으로 구분하여 String 타입의 배열에 넣는다.
  4. 배열의 값을 하나씩 꺼내 int로 변환한 후,
  5. list에 넣는 과정을 N번 반복한다.
  6. list 길이만큼의 int 배열을 생성하고,
  7. list의 값을 배열에 넣는다. (List -> 배열)
  8. 배열을 오름차순을 정렬한다.
  9. 0번째 인덱스 값과 맨 마지막 인덱스 값을 출력한다.
package lv_1;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class B10818 {
	public static void main(String[] args) throws Exception {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int N = Integer.parseInt(br.readLine()); //정수의 개수 N을 입력받는다.

		//Integer 타입의 List 만든다.
		List<Integer> list = new ArrayList<>();

		//정수 N개를 한줄로 입력받는다.
		//입력값을 공백으로 구분해서 String 타입의 배열에 넣는다.
		String[] str = br.readLine().split(" ");

		//N번 반복한다.
		for(int i=0;i<N;i++) {

			int num = Integer.parseInt(str[i]); //배열의 값을 num 변수에 넣는다.

			list.add(num); //list에 정수 추가
		}

		//list 길이만큼의 int 배열 생성
		int[] arr = new int[list.size()];

		//List -> 배열
		//list에 있는 값을 arr 배열에 넣는다.
		for(int i=0;i<arr.length;i++) {
			arr[i] = list.get(i);
		}

		//배열을 오름차순으로 정렬
		Arrays.sort(arr);

		System.out.print(arr[0] + " " + arr[arr.length-1]);
	}

}

🤓배운 점

int 배열을 List로 변환하기

  • List<Integer> list = new ArrayList<>();

int 타입의 배열은 Arrays.asList(arr);로 변환할 수 없다.
Integer 타입의 List를 만든 후, list.add를 사용해서 값을 추가해주어야 한다.

int[] arr = {1,2,3};

List<Integer> list = new ArrayList<>();

for(int n : list){
	list.add(n);
}

Integer ArrayList를 int 배열로 변환하기

  • arr[i] = list.get[i];

String 타입은 toArray(arr)를 사용해서 List를 배열로 변환할 수 있다. 하지만 int 타입은 안된다.
반복문을 사용해 list의 값을 배열에 넣어주어야 한다.

int[] arr = new int[list.size()];

for(int i=0;i<arr.length;i++) {
	arr[i] = list.get(i);
}

공백 단위로 데이터 구분하기

  • split(String regex)

readLine()은 한 줄 전체를 읽는다. 만약 이 한 줄을 여러 데이터로 나누고 싶다면 split을 사용하면 된다.
String regex는 어떤 문자로 구분할 것인가를 적어주면 된다.
입력값으로 데이터를 나눈 후 배열로 저장한다.

String[] str = br.readLine().split(" ");

이 코드는 입력값을 공백으로 구분하여 각 값을 배열에 넣는다.

배열 정렬하기

  • Arrays.sort(arr);

Arrays.sort를 사용해서 배열을 오름차순으로 정렬할 수 있다.

  • Arrays.sort(arr, Collections.reverseOrder());

매개변수에 Collections.reverseOrder()를 추가로 적어주면 내림차순으로 정렬할 수 있다.

0개의 댓글