Study/코딩스터디_TIL

[java] 큐 활용 문제풀이 백준 26043번 식당메뉴

아이바 2025. 2. 6. 22:25

 

 

 

큐를 이용해 들어온 수를 이용해 출력해주는 문제입니다.


1. switch를 이용해 유형에 따라 처리해 주었습니다.
1-1. 1유형이 들어온다면 학생의 번호와 원하는 메뉴를 배열로 만들어 큐에 저장했습니다.
1-2. 2유형이 들어온다면 큐에서 poll()을 이용해 원하는 메뉴를 먹었다면 A에 못 먹었다면 B에 저장을 해주엇습니다.

while (n-- > 0) {
    st = new StringTokenizer(br.readLine());
    type = Integer.parseInt(st.nextToken()); // 유형

    switch (type) {
    case 1:
        a = Integer.parseInt(st.nextToken()); // 학생의 번호
        b = Integer.parseInt(st.nextToken()); // 좋아하는 메뉴
        member = new int[2];
        member[0] = a;
        member[1] = b;

        list.add(member);
        break;
    case 2:
        b = Integer.parseInt(st.nextToken()); // 준비된 메뉴 번호
        member = list.poll();

        if (member[1] == b) { // 원하는 메뉴를 먹었을 때
            A.add(member[0]);
        } else { // 원하지 않은 메뉴를 먹었을 때
            B.add(member[0]);
        }

        break;
    }
}


2. 저장된 A, B 리스트를 통해 저장이 된 학생이 있다면 정렬을 한 후 출력을 해주었습니다.

if (A.size() == 0) { // 원하는 메뉴를 먹은 학생이 없다면
    sb.append("None");
} else {
    Collections.sort(A);

    for (int nn : A) {
        sb.append(nn).append(" ");
    }
}

sb.append("\n");

if (B.size() == 0) { // 원하지 않은 메뉴를 먹은 학생이 없다면
    sb.append("None");
} else {
    Collections.sort(B);

    for (int nn : B) {
        sb.append(nn).append(" ");
    }
}


3. 큐에 아직 남아있는 학생이 있다면 C에 저장한 후 정렬 후 출력을 해 주었습니다.

if (list.size() == 0) { // 못 먹은 학생이 없다면
    sb.append("None");
} else {
    List<Integer> C = new LinkedList<>(); // 못 먹은 학생

    while (!list.isEmpty()) {
        C.add(list.poll()[0]);
    }

    Collections.sort(C);
    for (int nn : C) {
        sb.append(nn).append(" ");
    }
}

 

 

 

코드

package Main;

import java.io.*;
import java.util.*;

public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();
		int n = Integer.parseInt(br.readLine()); // 정보의 개수
		
		List<Integer> A = new LinkedList<>(); // 원하는걸 먹은 학생
		List<Integer> B = new LinkedList<>(); // 원하지 않는걸 먹은 학생
		Queue<int[]> list = new LinkedList<>(); // 식당 줄
		
		int[] member;
		int type, a, b;
		StringTokenizer st;
		while (n-- > 0) {
			st = new StringTokenizer(br.readLine());
			type = Integer.parseInt(st.nextToken()); // 유형
			
			switch (type) {
			case 1:
				a = Integer.parseInt(st.nextToken()); // 학생의 번호
				b = Integer.parseInt(st.nextToken()); // 좋아하는 메뉴
				member = new int[2];
				member[0] = a;
				member[1] = b;
				
				list.add(member);
				break;
			case 2:
				b = Integer.parseInt(st.nextToken()); // 준비된 메뉴 번호
				member = list.poll();
				
				if (member[1] == b) { // 원하는 메뉴를 먹었을 때
					A.add(member[0]);
				} else { // 원하지 않은 메뉴를 먹었을 때
					B.add(member[0]);
				}
				
				break;
			}
		}
		
		if (A.size() == 0) { // 원하는 메뉴를 먹은 학생이 없다면
			sb.append("None");
		} else {
			Collections.sort(A);
			
			for (int nn : A) {
				sb.append(nn).append(" ");
			}
		}
		
		sb.append("\n");
		
		if (B.size() == 0) { // 원하지 않은 메뉴를 먹은 학생이 없다면
			sb.append("None");
		} else {
			Collections.sort(B);
			
			for (int nn : B) {
				sb.append(nn).append(" ");
			}
		}
		
		sb.append("\n");
		
		if (list.size() == 0) { // 못 먹은 학생이 없다면
			sb.append("None");
		} else {
			List<Integer> C = new LinkedList<>(); // 못 먹은 학생
			
			while (!list.isEmpty()) {
				C.add(list.poll()[0]);
			}
			
			Collections.sort(C);
			for (int nn : C) {
				sb.append(nn).append(" ");
			}
		}
		
		bw.write(sb.toString());
		bw.flush();
		bw.close();
		br.close();
	}
}

 

728x90