-
두번째 최소값 찾기Coding Test/Algorithm Labs 2023. 3. 23. 19:20
문제 :
9개의 서로 다른 자연수가 주어질 때, 이들 중 두 번째 최솟값을 찾고, 그 두 번째 최솟값이 몇 번째 수인지를 구하는 프로그램을 작성하시오. 예를 들어, 서로 다른 9개의 자연수 3, 29, 38, 12, 57, 74, 40, 85, 61 이 주어지면, 이들 중 두 번째 최솟값은 12이고, 이 값은 4번째 수이다.
입력 :
첫째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 10,000,000 보다 작다.
출력 :
첫째 줄에 두 번째 최솟값을 출력하고, 둘째 줄에 두 번째 최솟값이 몇 번째 수인지를 출력한다.
예제 입력 :
3
29
38
12
57
74
40
85
61예제 출력 :
12
4첫 번째 방법
package week2day1; import java.util.Scanner; public class SearchSecondMaxNum { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] array = new int[20]; // 배열 선언 for(int i=1; i<=9; i++) { // 배열 입력 array[i] = sc.nextInt(); } int min = 20000000; // 10000000 미만의 수이므로 넉넉하게 20000000으로 초기화 int index= 0 ; // 최소값 index for(int i=1; i<=9; i++) { // 1. 최솟값 찾기 if(array[i] < min) { min = array[i]; index = i; } } int min2 = 20000000; int index2 = 0; for(int i=1; i<=9; i++) { // 2. 2번째 최솟값 찾기 if(i == index) continue; // 최소값이면 그냥 지나가도록 설정 if(array[i] < min2) { min2 = array[i]; index2 = i; } } System.out.println(min2); System.out.println(index2); } }
두 번째 방법
package week2day1; import java.util.Scanner; public class SearchSecondMaxNum { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] array = new int[20]; // 배열 선언 for(int i=1; i<=9; i++) { // 배열 입력 array[i] = sc.nextInt(); } int min = 20000000; // 10000000 미만의 수이므로 넉넉하게 20000000으로 초기화 int index= 0 ; // 최소값 index for(int i=1; i<=9; i++) { // 1. 최솟값 찾기 if(array[i] < min) { min = array[i]; index = i; } } /* int min2 = 20000000; int index2 = 0; for(int i=1; i<=9; i++) { // 2. 2번째 최솟값 찾기 if(i == index) continue; // 최소값이면 그냥 지나가도록 설정 if(array[i] < min2) { min2 = array[i]; index2 = i; } } */ array[index] = 20000000; // 최소값을 구한뒤 큰 수로 바꿔서 다음 최소값을 구한다. int min2 = 20000000; int index2 = 0; for(int i=1; i<=9; i++) { // 2. 2번째 최솟값 찾기 if(array[i] < min2) { min2 = array[i]; index2 = i; } } System.out.println(min2); System.out.println(index2); } }
출력화면 문제해결 순서
1. 최솟값을 찾는다
2. 그 수를 제외한 가장 작은 수를 구한다.
첫 번째 방법은 최솟값을 구한 뒤 continue를 이용해 최솟값을 스킵한 후 다음 최솟값을 구한다.
두 번째 방법은 최솟값을 구한 뒤 그 배열의 값을 다른 큰 수로 바꾼 뒤 최솟값을 구한다.
'Coding Test > Algorithm Labs' 카테고리의 다른 글
대소문자 변환 (1) 2023.03.28 지뢰찾기 (2) 2023.03.27 행렬 뒤집기 (1) 2023.03.23 최대값 구하기 (0) 2023.03.21 역으로 출력하기 (1) 2023.03.21