ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 두번째 최소값 찾기
    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

    댓글

Designed by Tistory.