알고리즘

[JAVA] SWEA_2063(중간값 찾기)

줌인. 2024. 6. 25. 20:33

▶ SWEA_2063(중간값 찾기)

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5QPsXKA2UDFAUq&categoryId=AV5QPsXKA2UDFAUq&categoryType=CODE&problemTitle=2063&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1

 

[제출 코드]

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int count = sc.nextInt();
    sc.nextLine(); 
    ArrayList<Integer> ar = new ArrayList<Integer>(count);

    String num = sc.nextLine(); 
    String [] result = num.split(" ");
    for(int i=0; i < result.length; i++) {
        //System.out.println(result[i]);
        //Integer.parseInt(result[i]);
        ar.add(Integer.parseInt(result[i]));
    }
    Collections.sort(ar);
    for (int i=0; i < ar.size();i++) {
        if (i == ar.size() / 2) {
            System.out.println(ar.get(i));
        }
    }
}

- 문제를 제대로 읽기 : 입력값을 두 번 받음

- list 배열의 크기 지정

- 공백을 split을 기반으로 나눈후 숫자형으로 변환

- 중간값 확인을 위해 전체의 / 2를 진행

 

 

 

[next와 nextLine이해하기]

next() nextLine()
  • 동작 방식: next() 메서드는 입력에서 다음 토큰(공백, 탭, 줄바꿈 문자 등으로 구분된 단어)을 읽어들임
  • 사용 상황: 공백이나 구분자를 기준으로 단어 단위의 입력을 처리할 때 유용
  • 단점: 입력 스트림에 남아 있는 공백이나 줄바꿈 문자를 무시하지 않기 때문에 다음 입력을 받을 때 문제가 발생할 수 있음
  • 동작 방식: nextLine() 메서드는 입력에서 줄바꿈 문자를 포함하여 한 줄 전체를 읽어들임
  • 사용 상황: 줄 단위로 입력을 처리할 때 유용합니다. 사용자로부터 한 줄 전체를 입력받고 그 줄을 처리하고자 할 때 사용
  • 장점: 줄바꿈 문자를 포함하여 입력을 읽어들여서, 공백과 줄바꿈 문자 처리에 유리

 

[공백으로 발생할 수 있는 문제_nextInt]

import java.util.Scanner;

public class NextIntNextLineExample {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("Enter an integer:");
        int number = sc.nextInt(); // 정수 읽기
        sc.nextLine(); // 버퍼 비우기

        System.out.println("Enter a sentence:");
        String sentence = sc.nextLine(); // 한 줄 전체 읽기

        System.out.println("Number: " + number);
        System.out.println("Sentence: " + sentence);
    }
}

※ 공백 문제: nextInt() 등과 같이 다른 next 메서드와 nextLine()을 함께 사용할 때,

                   중간에 남아 있는 줄바꿈 문자를 처리하기 위해 sc.nextLine()을 호출하여 버퍼를 비워야

※ Scanner 클래스에서 입력을 처리할 때, 버퍼를 비워야 하는 이유는 nextInt(), next(), nextDouble() 등의 메서드가

   입력 버퍼에서 공백 문자(공백, 탭, 줄바꿈 등)를 남기기 때문

   '숫자만 읽어오는 등'의 문제로 인해 다음 입력을 받을 때 예상치 못한 결과가 발생할 수 있음

 

 


 

[초기 코드]

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    List<Integer> ar = new ArrayList<Integer>();
    String num = sc.nextLine();
    String [] numAr = num.split(" ");
    for(int i =0; i<numAr.length;i++) {
        ar.add(Integer.parseInt(numAr[i]));
    }

    Collections.sort(ar);
    if (ar.size() % 2 != 0) {
        for(int i=0; i<ar.size();i++) {
            if(i == (ar.size() / 2)) {
                System.out.println(ar.get(i));
            }
        }
    }
}

- 입력값을 받아오지 않는 문제 발생

728x90