99클럽 코테 스터디 18일차 TIL
💙 JAVA 비기너
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Queue<Integer> students = new LinkedList<>();
int line_max = 0, student_min = n;
for(int i=0; i<n; i++) {
String[] command = br.readLine().split(" ");
if("1".equals(command[0])) {
int student = Integer.parseInt(command[1]);
students.add(student);
if(line_max < students.size()) {
line_max = students.size();
student_min = student;
} else if(line_max == students.size()) {
student_min = (student_min > student) ? student : student_min;
}
} else {
students.poll();
}
}
br.close();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(line_max + " " + student_min);
bw.flush();
bw.close();
}
}
처음에 제출할 당시 for문 안에서 유형이 1일 때 가장 긴 줄과 마지막 학생 번호를 구하는 코드를
if(line_max <= students.size()) {
line_max = students.size();
student_min = (student_min > student) ? student : student_min;
}
로 했다가 체점이 2퍼센트 되자마자 [틀렸습니다]가 떴다.
왜?!?! 하고 질문 게시판에도 들어갔는데 감자와 같은 사람이 있었다!
하지만 답변이 없었다...
첫번째 코드에서는 줄의 길이line_max
가 가장 길면 무조건 마지막 줄 학생의 번호를 student_min
과 비교하여 더 작은 수를 student_min
에 넣어줬다.
문제에 있는 예시도 잘 돌아가는데 어째서?!
그래서 잠시 째려보다가 얼마안가 답을 찾았다.
이 문장에 집중하느라
더 중요한 이 문장을 잊었다.
줄의 길이가 가장 길 때마다 비교해주는 것이 아니라 줄의 길이가 가장 길면 마지막에 서있는 학생의 수를 student_min
에 넣어줘야하고 줄이 가장 길 때가 중복이 되면 그 때는 마지막 학생과 student_min
을 비교하여 더 작은 수를 저장해야한다.
if(line_max < students.size()) {
line_max = students.size();
student_min = student;
} else if(line_max == students.size()) {
student_min = (student_min > student) ? student : student_min;
}
저장해둔 줄의 최대 길이인 line_max
가 현재 줄의 길이인 students.size()
보다 클 때와 같을 때를 분리해줘서 코드를 작성해줬다.