HOONDOC

[백준]2750 수 정렬하기 1 - 자바/Java 본문

문제 풀이/BAEKJOON

[백준]2750 수 정렬하기 1 - 자바/Java

HOONDOC 2022. 12. 31. 16:20

2750번: 수 정렬하기

🌱풀이

알고리즘

  1. 버블 소트 알고리즘을 구현한다.
  2. 최상단 반복문은 루프의 숫자를 의미한다.
  3. 이 때 반복 변수인 i는 실제 배열을 순회하는데 영향을 주므로 0에서 N-2까지 순회하도록 한다.
  4. 루프 반복문 내 반복문은 배열을 순회하는 반복문이다.배열의 인덱스가 가장 큰 순서대로 정렬이 완료되기 때문이다.
  5. i의 값에 따라 j가 순회하는 최대 인덱스는 순차적으로 감소한다.
  6. swap 알고리즘을 구현할 때 헷갈리지 않도록 주의하자.

메모리 : 12712KB, 시간 : 100ms

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int N = Integer.parseInt(br.readLine());
		// 배열에 값 저장하기
		int[] number = new int[N];
		for(int i = 0; i<N; i++) number[i] = Integer.parseInt(br.readLine());
		
		for(int i = 0; i<N-1; i++) { // N-1번의 루프
			for(int j = 0; j<N-1-i; j++) {
				if(number[j] > number[j+1]) { //swap 조건
					int tmp = number[j];
					number[j] = number[j+1];
					number[j+1] = tmp;
				}
			}
		}
		for(int i = 0; i<N-1; i++) sb.append(number[i]+"\\n");
		sb.append(number[N-1]);
		System.out.print(sb.toString());
		br.close();
	}
}

🪴코드 리뷰

🌿메모리 : 22356KB, 시간 : 360ms

특이한 코드가 있어서 가져와봤다. 내가 구현한 버블 정렬의 코드는 최댓값을 최우측에 배정하여 정렬을 진행하지만, 아래 풀이자는 최솟값을 기준으로 정렬을 해나갔다. Swap 과정도 독특했던게, 배열 내 데이터의 교환을 Swap 내에서 이루어지도록 하는게 아니라 swap 메소드에 인자를 전달하고, 값을 반환받는 두 단계에 나눠서 이루어지도록 해놨다. 데이터로 곡예를 하는 느낌이랄까?

정렬 과정은 머릿 속에 있는 듯 하지만 깔끔하게 정리된 코드는 아닌 듯 하다. 이렇게 되면 메소드에 기능이 전담되지 않고, 독자는 필자의 의도를 불필요하게 추론해야 한다.

💡 풀이자 : wlddud99

import java.util.Scanner;

public class Main{

    public static void main(String args[]){

        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int least;

        int[] arr = new int[N];
        for(int i=0; i<N; i++){
            arr[i] = sc.nextInt();
        }
        for (int i=0; i<N-1; i++){
            least = i;
            for (int j=i+1; j<N; j++){
                if (arr[j] < arr[least]) {least = j;}
            }
            arr[least] = SWAP(arr[i], arr[i] = arr[least]);
        }
        for (int i = 0; i<N; i++){
            System.out.println(arr[i]);
        }

    }

    public static int SWAP(int x, int y){
        return x;
    }
}

Conclusion

  • 메소드로 분리시킬거면 되도록 모든 기능이 메소드 내에서 이루어지도록 하기.