Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Tags
- 백준2751
- 백준2750
- 백준11286
- 정렬알고리즘
- 백준12891
- 백준1546
- 백준13023
- 백준1253
- 자바
- 백준17298
- 백준11399
- 백준1940
- 버블소트
- 백준11724
- 백준11720
- 백준1377
- stack
- 백준2018
- 구간합
- 백준_구간합구하기
- 백준1427
- 백준1517
- 백준11003
- 백준10998
- Java
- 백준_11659
- 백준
- 백준1260
- 백준1874
- 백준2023
Archives
- Today
- Total
HOONDOC
[백준]2750 수 정렬하기 1 - 자바/Java 본문
2750번: 수 정렬하기
🌱풀이
알고리즘
- 버블 소트 알고리즘을 구현한다.
- 최상단 반복문은 루프의 숫자를 의미한다.
- 이 때 반복 변수인 i는 실제 배열을 순회하는데 영향을 주므로 0에서 N-2까지 순회하도록 한다.
- 루프 반복문 내 반복문은 배열을 순회하는 반복문이다.배열의 인덱스가 가장 큰 순서대로 정렬이 완료되기 때문이다.
- i의 값에 따라 j가 순회하는 최대 인덱스는 순차적으로 감소한다.
- 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
- 메소드로 분리시킬거면 되도록 모든 기능이 메소드 내에서 이루어지도록 하기.
'문제 풀이 > BAEKJOON' 카테고리의 다른 글
| [백준]1427 소트인사이드 - 자바/Java (0) | 2023.01.02 |
|---|---|
| [백준]1377 버블 소트 - 자바/Java (0) | 2023.01.02 |
| [백준]11286 절댓값힙 - 자바/Java (0) | 2022.12.31 |
| [백준]1253 좋다 - 자바/Java (0) | 2022.12.31 |
| [백준]17298 오큰수 - 자바/Java (1) | 2022.12.30 |