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 | 31 |
Tags
- 백준
- 백준_11659
- 백준10998
- 백준11724
- 백준1874
- stack
- 백준1377
- 백준17298
- 백준12891
- 백준1427
- Java
- 구간합
- 백준1546
- 백준2750
- 백준11399
- 백준11286
- 백준2751
- 백준1517
- 정렬알고리즘
- 백준11003
- 백준2018
- 백준1260
- 백준1940
- 백준1253
- 백준13023
- 백준11720
- 버블소트
- 자바
- 백준_구간합구하기
- 백준2023
Archives
- Today
- Total
HOONDOC
[백준]1427 소트인사이드 - 자바/Java 본문
🌱풀이
알고리즘
- 선택 정렬 알고리즘이다.
- 해당 루프에서 탐색할 배열 내 최댓값의 값을 찾는다.
- Swap을 통해 차례대로 앞쪽에 배정해준다.
메모리 : 11492KB, 시간 : 80ms
package book_algoTEst;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BOJ_1427 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String numberOrigin = br.readLine();
int[] number = new int[numberOrigin.length()];
for(int i = 0; i<number.length; i++) number[i] = numberOrigin.charAt(i) - '0';
for(int i = 0; i<number.length; i++) {
int Max = i; // 해당 루프에서 최댓값이 위치할 인덱스
for(int j = i+1; j<number.length; j++) { //최댓값 찾기
if(number[j] > number[Max]) Max = j;
}
if(number[i] < number[Max]) { // 최댓값이 있다면 Swap
int tmp = number[i];
number[i] = number[Max];
number[Max] = tmp;
}
}
for(int i = 0; i<number.length; i++) sb.append(number[i]);
System.out.print(sb.toString());
br.close();
}
}
🪴코드 리뷰
알고리즘은 동일하지만 사용한 자료 구조가 다르다. ArrayList를 연습하려고 한 것 같다. Collection에는 배열 내 최댓값을 찾아주는 Collections.max() 메소드가 있고, List 자료구조는 리스트 내 값의 삭제와 추가가 자유로우므로 추출한 최댓값을 삭제하면서 출력한 것이다.
알고리즘의 구현에 충실한 것도 좋지만 이미 구현되어있는 자료구조의 내장 메소드를 잘 활용할 줄 아는 것도 중요해보인다.
🌿메모리 : 17632KB, 시간 : 200ms
💡 풀이자 : ehdgus6879
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
String str = sc.next();
String[] arr = str.split("");
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i = 0 ; i < arr.length ; i++){
list.add(Integer.parseInt(arr[i]));
}
for(int i =0; i < arr.length; i++){
int max = Collections.max(list);
list.remove((Integer) max);
sb.append(max);
}
System.out.println(sb.toString());
}
}
Collection에는 내림차순 정렬도 내장 메소드로 구현이 되어있구나. 근데 Collections.reverseOrder()은 반환 값이 뭐길래 Arrays.sort에 인자로 들어갈 수 있는거지?
🌿메모리 : 14272KB, 시간 : 124ms
💡 풀이자 : dudtkd1221
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Integer[] array;
String s = br.readLine();
array = new Integer[s.length()];
for(int i=0; i< s.length(); i++){
array[i] = Character.getNumericValue(s.charAt(i));
}
Arrays.sort(array, Collections.reverseOrder());
for(Integer i : array){
System.out.print(i);
}
}
}
Conclusion
- 주말을 활용하여 Array와 Collection에 대해 조사해보기.
- 고난이도 알고리즘으로 갈수록 다양한 자료구조를 자유롭게 사용할 수 있는 발상의 유연함이 필요하므로, 기본 알고리즘의 구현을 익히고 난 뒤에는 다양한 시도를 해보자.
'문제 풀이 > BAEKJOON' 카테고리의 다른 글
[백준]2750 수 정렬하기 2 - 자바/Java (0) | 2023.01.05 |
---|---|
[백준]2750 수 정렬하기 1 - 자바/Java (0) | 2023.01.02 |
[백준]1377 버블 소트 - 자바/Java (0) | 2023.01.02 |
[백준]2750 수 정렬하기 1 - 자바/Java (0) | 2022.12.31 |
[백준]11286 절댓값힙 - 자바/Java (0) | 2022.12.31 |