🌞Algorithm/🔥Baekjoon

[Baekjoon] 5619_세 번째

뿌야._. 2024. 7. 30. 13:15
문제(출처: https://www.acmicpc.net/problem/5619)

< 세 번째 >

 

문제 풀이 

 

주어진 수를 정렬한 후 2개를 선택해서 붙여서 새로운 수를 만들어 ArrayList에 저장한다. ArrayList를 정렬 후 3번째 값을 출력한다. ArrayList의 3번째 값이 바뀌지 않는다면 그 이후에도 바뀔 일이 없으므로 종료한다.

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class _5619_ { // 세 번째

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

		int n = Integer.parseInt(bf.readLine());

		int arr[] = new int[n];
		for (int i = 0; i < n; i++) {
			arr[i] = Integer.parseInt(bf.readLine());
		}

		Arrays.sort(arr);

		ArrayList<Integer> result = new ArrayList<>();
		int temp = -1;
		for (int i = 0; i < n; i++) {
			for (int j = i + 1; j < Math.min(n, i + 4); j++) {
				result.add(Integer.parseInt(Integer.toString(arr[i]) + Integer.toString(arr[j])));
				result.add(Integer.parseInt(Integer.toString(arr[j]) + Integer.toString(arr[i])));
			}
			Collections.sort(result);
			if (result.size() > 3) {
				if (temp == result.get(2)) {
					break;
				} else {
					temp = result.get(2);
				}
			}
		}
		System.out.println(result.get(2));
	}
}
변수)
n : 자연수 개수
arr : 자연수 저장한 배열
result : 2개를 선택해서 붙여서 새로운 수를 만들어 저장하는 ArrayList
temp : 3번째로 작은 수

 

수의 개수 n을 입력받는다. n개의 자연수를 입력받아 arr에 저장한다. 배열을 정렬한 후 앞에서부터 2개씩 선택해서 새로운 수를 만들어 ArrayList에 저장한다. 2개씩 선택할 때는 하나의 수와 그 수의 다음 3번째 값까지만 선택한다. 그 이후는 선택해도 세 번째로 작은 수를 구하는 데는 영향이 없기 때문이다. ArrayList를 정렬한 후 3번째로 작은 값을 찾는다. 만약 이전에 구했던 3번째 값과 현재 3번째 값이 일치하다면 앞으로 값이 바뀔 일이 없으므로 종료한다. 값이 일치하지 않다면 이전에 구했던 3번째 값인 temp를 업데이트한다. 

 

최종 3번째로 작은 수를 출력한다.



 

'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글

[Baekjoon] 2508_사탕 박사 고창영  (0) 2024.08.02
[Baekjoon] 4921_나무 블록  (0) 2024.08.01
[Baekjoon] 10799_쇠막대기  (0) 2024.07.26
[Baekjoon] 15705_단어 찾기  (1) 2024.07.25
[Baekjoon] 8989_시계  (0) 2024.07.24