728x90
반응형
선택 정렬 정리내용
[백준]
23881번: 알고리즘 수업 - 선택 정렬1
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main{
public static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static BufferedWriter bf = new BufferedWriter(new OutputStreamWriter(System.out));
public static String selection_sort( int[] A, int k ) {
int maxIndex=0;
int exchange = 0;
for (int i=A.length-1; i>0; i--) {
maxIndex = i;
// 가장 큰 수 찾기
for(int j=0; j<=i; j++) {
// 저장된 최대값이 작을 때 최대값 갱신
if(A[maxIndex] < A[j]) {
maxIndex = j;
}
} // end for j
// 자리 교체
if(i != maxIndex) {
exchange++;
int AValue = A[i];
A[i] = A[maxIndex];
A[maxIndex] = AValue;
if(exchange == k) {
return A[maxIndex] +" "+ A[i];
}
}
}
return "-1"; // 교환 회수가 k보다 작을 경우 -1 출력
}
public static void main(String[] args) {
String r; // 첫번째 줄 입력받을 변수
StringTokenizer st; // 두번째 줄 입력받을 변수
try {
r = br.readLine(); // 첫번째 줄 입력 받기 (배열 A의 크기, 교환 횟수)
int size = Integer.parseInt(r.split("\\s+")[0]); // 배열 A의 크기 변수 선언 및 저장
int k = Integer.parseInt(r.split("\\s+")[1]); // 교환 횟수 변수 선언 및 저장
st = new StringTokenizer(br.readLine()); // 두번째 줄 입력 받기(배열 A의 원소)
int[] A = new int[size]; // 크기가 size인 배열A 선언
for(int i=0; i < size; i++) { // 배열 A에 입력받은 원소(st) 넣기
A[i] = Integer.parseInt(st.nextToken());
}
bf.write( selection_sort(A, k) ); // selection_sort(A, k) 내용 출력
bf.close(); // 버퍼 닫기
} catch (IOException e) {
e.printStackTrace();
}
}
}
#BufferedReader | BufferedWriter
버퍼를 이용해 읽고 쓰는 함수 (입출력의 효율↑)
▶Scanner와 비교
더보기
*Scanner
띄어쓰기와 엔터를 경계로 인식 -> 따로 가공할 필요가 없어서 사용하기 편함
*BufferedReader
엔터로만 경계 인식 -> 입력받은 데이터 모두 String으로 고정됨. Scanner 보다 빠름
BufferedReader, BufferedWriter에 관한 내용 - https://dlagusgh1.tistory.com/481
#StringTokenizer (문자열 토큰화)
하나의 문자열을 여러 개의 토큰으로 분리하는 클래스
특정 문자에 따라 문자열을 나누고 싶을때 이용
StringTokenizer에 관한 내용 - https://jhnyang.tistory.com/398
★ 백준에서 JAVA로 풀 경우 class의 이름을 Main으로 지정해야 오류가 나지 않고 채점됨.
★ Java에서 입출력 소요시간 비요 (시간 초과 이유)
Scanner > Buffer
=> Buffer를 사용해서 코드를 작성하는 것이 시간초과의 문제를 해결함.
반응형
728x90
'코딩 테스트' 카테고리의 다른 글
[자료구조와 알고리즘: JAVA 백준] 코딩테스트 연습 - 에디터 (0) | 2022.03.12 |
---|---|
[자료구조와 알고리즘: JAVA 백준] 코딩테스트 연습 - 선택 정렬5 (0) | 2022.03.11 |
[자료구조와 알고리즘: JAVA 프로그래머스] 코딩테스트 연습 - 입국심사 (0) | 2022.02.25 |