반응형
틀린 코드 리뷰
import java.util.*;
import java.io.*;
public class Main {
public static int[] waitingLine() throws IOException {
int[] answer = new int[2];
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int lines = Integer.parseInt(br.readLine());
Queue<String> waiting = new LinkedList<String>();
int maxWaiting = 0;
int studentNum = 0;
int minStudentNum = 0;
for (int i = 0; i < lines ; i++){
String line = br.readLine();
String[] array_line = line.split(" ");
if(array_line.length > 1){
waiting.offer(array_line[1]);
}
if(array_line.length == 1){
waiting.poll();
}
if (maxWaiting < waiting.size()){
maxWaiting = waiting.size();
minStudentNum = Integer.parseInt(array_line[1]);
}
if (maxWaiting == waiting.size() && studentNum != 0){
studentNum = Integer.parseInt(array_line[1]);
if(minStudentNum > studentNum){
minStudentNum = studentNum;
}
}
}
answer[0] = maxWaiting;
answer[1] = minStudentNum;
return answer;
}
public static void main(String[] args) throws IOException {
int[] answer = new int[2];
answer = waitingLine();
System.out.println(answer[0] + " " + answer[1]);
}
}
문제점
- studentNum 초기화 문제:
studentNum의 초기값이 0으로 설정되어 있어, if (maxWaiting == waiting.size() && studentNum != 0) 조건이 항상 false로 처리될 수 있음.
처음 최대값이 한개일 때를 대비해 처음 초기화가 studentNum이 아닌, minStudentNum으로 해서 더 문제
- 학생 번호 업데이트 조건 문제:
if (maxWaiting == waiting.size() && studentNum != 0) 구문은 최대 대기열 크기가 동일할 때 studentNum를 최소 학생 번호로 업데이트하려는 의도였지만, 불필요한 로직임.
최대값일 때 가장 작은 값을 minStudentNum으로 넣어서 리턴하면 되는거지, N번째 최대값일 때, 최대값이 갱신될때를 구분해서 업데이트 할 필요는 없다
- 명령 처리 순서 및 로직 개선:
최대값이나, 학생 Num이 바뀌는 순간 : poll 될 때가 아닌, offer()될 때이다. 구문을 나누어 보다 명확하게 작성하였다.
import java.util.*;
import java.io.*;
public class Main {
public static int[] waitingLine() throws IOException {
int[] answer = new int[2];
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int lines = Integer.parseInt(br.readLine());
Queue<Integer> waiting = new LinkedList<>();
int maxWaiting = 0;
int minLastStudentNum = Integer.MAX_VALUE; // 맨 뒤 학생 번호의 최소값 초기화
for (int i = 0; i < lines; i++) {
String line = br.readLine();
String[] array_line = line.split(" ");
int type = Integer.parseInt(array_line[0]);
if (type == 1) { // 학생이 줄을 서는 경우
int studentNum = Integer.parseInt(array_line[1]);
waiting.offer(studentNum);
if (waiting.size() > maxWaiting) {
maxWaiting = waiting.size();
minLastStudentNum = studentNum;
} else if (waiting.size() == maxWaiting) {
minLastStudentNum = Math.min(minLastStudentNum, studentNum);
}
} else if (type == 2) { // 학생이 식사를 시작하는 경우
waiting.poll();
}
}
answer[0] = maxWaiting;
answer[1] = minLastStudentNum;
return answer;
}
public static void main(String[] args) throws IOException {
int[] answer = waitingLine();
System.out.println(answer[0] + " " + answer[1]);
}
}
반응형
'Java' 카테고리의 다른 글
[java] 최대힙, 최소힙 (0) | 2024.11.15 |
---|---|
[java] type 변경 함수 정리 (1) | 2024.11.15 |
[백준] 기술 연계마스터 임스 (1) | 2024.11.13 |
[java] 문자열 나누기 (1) | 2024.10.30 |
[java] 크기가 작은 부분 문자열 (0) | 2024.10.29 |