[99클럽 코테 스터디 18일차 TIL] 백준 26042 식당 입구 대기 줄

말하는 감자·2024년 11월 14일
0
post-thumbnail

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()보다 클 때와 같을 때를 분리해줘서 코드를 작성해줬다.

꺄❤️

profile
나는 말하는 감자다

0개의 댓글