https://www.acmicpc.net/problem/23968
알고리즘 분류 : 구현, 정렬, 시뮬레이션
❓문제
🔅해석
비교 기반 정렬 알고리즘인 버블 정렬을 활용하는 문제이다.
버블 정렬은 양옆에 위치한 두 값을 비교하면서 크기 순으로 정렬한다.
그 동안은 전역변수, 지역변수 신경 쓰지않고 작성했지만 이제부터 ChatGPT-4o에게 코드리뷰를 받고 코딩 습관을 고치려고 한다.
코드리뷰 전 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
//백준 23968번
public class Main {
static int N, K;
static int[] inputs;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
inputs = new int[N];
// 배열 입력받기
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
inputs[i] = Integer.parseInt(st.nextToken());
}
int cnt = 0; //정렬 횟수
int temp = 0;
boolean isEnd = false;
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - 1; j++) {
if (inputs[j] > inputs[j + 1]) {
temp = inputs[j];
inputs[j] = inputs[j + 1];
inputs[j + 1] = temp;
cnt++;
}
if (cnt >= K) {
System.out.printf("%d %d", inputs[j], inputs[j + 1]);
isEnd = true;
return;
}
}
}
if (!isEnd) System.out.println(-1);
br.close();
}
}
리뷰 포인트
1 전역 변수를 최소화
- 전역 변수가 많아질수록 코드의 가독성과 유지보수성이 떨어집니다. 전역 변수는 클래스의 상태를 표현할 때 사용하고, 특정 메서드에서만 사용하는 변수는 지역 변수로 두는 것이 좋습니다.
2. 메서드 분리
- main 메서드를 간결하게 유지하고 코드 가독성과 재사용성을 높입니다.
⭕정답 코드(코드리뷰 후)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
//백준 23968번
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
int[] inputs = new int[N];
// 배열 입력받기
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
inputs[i] = Integer.parseInt(st.nextToken());
}
bubbleSort(N, K, inputs);
}
private static void bubbleSort(int N, int K, int[] inputs) {
int cnt = 0;
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - 1; j++) {
if (inputs[j] > inputs[j + 1]) {
swap(inputs, j, j + 1);
cnt++;
}
if (cnt >= K) {
System.out.printf("%d %d", inputs[j], inputs[j + 1]);
return;
}
}
}
System.out.println(-1);
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
❗결과
성능은 크게 차이는 없지만, 추후 올바른 코딩 습관을 위해 꾸준히 신경써야겠다.
'코딩테스트 > 백준' 카테고리의 다른 글
[코테] 백준 1427번 : 소트인사이드 (java) + 선택 정렬 알고리즘 (0) | 2024.11.01 |
---|---|
[코테] 백준 2458번 : 키 순서 (java) (0) | 2024.08.16 |
[코테] 백준 11657번 : 타임 머신 (java) (0) | 2024.08.16 |
[코테] 백준 1753번 : 최단경로 (java) (0) | 2024.08.16 |
[코테] 백준 11438번 : LCA 2 (java) (0) | 2024.08.16 |