[SW Expert Academy] 2063. 중간값 찾기

사용 언어 : JAVA

결과

  • 메모리 : 20,392 kb
  • 실행 시간 : 131 ms
  • 코드 길이 : 2,241

풀이

fail

package level_1;

import java.util.*;

public class java_2063_1 {
	
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		
		String str_num = sc.next();
		int num = Integer.parseInt(str_num);
		
		String str = sc.nextLine();
		String[] str_arr = str.split(" ");
		
		int[] arr = new int[str_arr.length];
		
		for (int i = 0; i < str_arr.length; i++) {
			arr[i] = Integer.parseInt(str_arr[i]);
		}
		
		
		Arrays.sort(arr);
		
		int n = arr.length / 2;
		
		System.out.println(arr[n]);
	}

}

pass

package level_1;

import java.util.*;

public class java_2063_2 {
    
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        
        int num = sc.nextInt();        
        sc.nextLine(); // Consume the newline character
        
        String str = sc.nextLine();
        String[] str_arr = str.split(" ");
        
        int[] arr = new int[str_arr.length];
        
        for (int i = 0; i < str_arr.length; i++) {
            arr[i] = Integer.parseInt(str_arr[i]);
        }
        
        Arrays.sort(arr);
        
        int n = arr.length / 2;
        
        System.out.println(arr[n]);
    }
}

주석

- 배열에 집어넣어서 배열을 오른차순으로 정렬한 뒤 가운데 값을 index로 찾아 가져와주었다. 물론 일일이 어느쪽이 큰지 비교해서 제일 큰 수와 작은 수를 삭제해서 그걸 여러번 반복할 수도 있겠으나 그러면 코드가 엄청 길어질 것 같아서 다른 방면으로 생각해보고 구현했다.

- 그런데 fail 코드 실행 시 콘솔에 아래와 같은 에러가 자꾸 출력되었었다.  혹시나 num 값이 int로 제대로 받아와지지 않은 줄 알고 변환하고 별 짓을 다했지만 해결 되지 않았다. 


Exception in thread "main" java.lang.NumberFormatException: For input string: "" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) at java.base/java.lang.Integer.parseInt(Integer.java:678) at java.base/java.lang.Integer.parseInt(Integer.java:786) at level_1.java_2063_1.main(java_2063_1.java:20)

- 서치를 해보니 Scanner가 아래 라인을 제대로 못 읽어와서 그런거라고. nextInt 아랫줄에 nextLine을 추가해주면 된다고 해서 추가해주었더니 pass.

- nextLine() : '\n'을 포함한 한 라인을 읽음 -> '\n'을 버린 나머지 값을 리턴 ('\n'만 있는 경우 리턴값이 없다!)