Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- openapi
- 4A피드백
- 자바
- 스레드동기화
- 프로그래머스
- string메서드
- 재귀적사고
- 99클럽
- 백준
- 향상된for문
- 파일사용권한
- API
- 날씨API
- 루트사용자
- 참조변수타입변환
- 네이티브애플리케이션
- staging_area
- SQ3R
- SQL
- 제너릭메서드
- 성장형마인드셋
- Java
- 프로젝트
- Spring
- 코딩테스트
- API명세서
- 스프링
- ChatGPT
- 동전교환알고리즘
- 배열탐색
Archives
- Today
- Total
개발 공부용
[백준] 26043 - 식당 메뉴 본문
문제
학교 식당에서 두 가지 메뉴가 제공되고 각각의 학생이 좋아하는 메뉴를 선택한 상태이다.
학생이 학교 식당에 도착하고 식사가 준비되는 n개의 정보가 저장된 S가 주어짐.
S에 저장된 정보를 순서대로 처리한 뒤 좋아하는 메뉴를 먹은 학생 목록 A, 좋아하지 않는 메뉴를 먹은 학생 목록 B,
식당에 도착했으나 식사하지 못한 학생 목록 C를 출력.
입력
- 첫 번째 줄에 N (1<=N<=500,000)
- 두 번째 줄부터 한 줄에 유형 1 또는 유형 2가 저장되어 있음.
- 유형 1은 1 a b 형태로 a는 양의 정수인 학생 번호, b는 좋아하는 메뉴 번호인 학생 한 명이 식당에 도착하여 맨 뒤에 줄을 서는 것.
- 유형 2는 2 b 형태로 메뉴 번호가 양의 정수 b인 식사 1인분이 준비되어 맨 앞에서 대기 중인 학생 1명이 식사를 시작하는 것
- b는 1 또는 2이다.
출력
- 첫 번째 줄: 좋아하는 메뉴를 먹은 학생 목록 A에 있는 학생 번호를 빈칸 공백을 두고 오름차순으로 출력
- 두 번째 줄: 좋아하지 않는 메뉴를 먹은 학생 목록 B에 있는 학생 번호를 빈칸 공백을 두고 오름차순으로 출력
- 세 번째 줄: 식당에 도착했으나 식사하지 못한 학생 목록 C에 있는 학생 번호를 빈칸 공백을 두고 오름차순으로 출력
문제 풀이 방법
- FIFO이므로 큐 사용
- 데크으로 유형 1을 넣을 학생 큐를 구현한다.
- 학생 목록 A, B, C를 배열로 선언한다.
- 유형 2가 입력될 때마다 학생 큐의 앞에서 하나씩 pop하고 서로 비교한다,
- A, B 혹은 C에 알맞게 학생번호를 넣는다.
작성한 코드
import sys
from collections import deque
N = int(sys.stdin.readline().strip())
students = deque()
like = []
dont_like = []
dont_eat = []
for i in range(N):
student = sys.stdin.readline().strip().split()
if (student[0]=='1'):
students.append(student)
else:
if (len(students)!=0):
eat = students.popleft()
if (eat[2]==student[1]):
like.append(int(eat[1]))
else:
dont_like.append(int(eat[1]))
if (len(students)!=0):
dont_eat = [int(i[1]) for i in students]
like.sort()
dont_like.sort()
dont_eat.sort()
print(' '.join(map(str,like)) if like else "None")
print(' '.join(map(str,dont_like)) if dont_like else "None")
print(' '.join(map(str,dont_eat)) if dont_eat else "None")
문제는 뭔가 복잡하게 설명되어 있으나 찬찬히 읽어보면 그렇게 어렵지는 않은 문제였다.
문자열 연산을 + 이용해서 하면 시간 초과가 발생한다.
따라서 join을 사용했다.
'코딩 테스트 > 99클럽 TIL' 카테고리의 다른 글
[프로그래머스] 힙 - 더 맵게 (0) | 2025.02.11 |
---|---|
[백준] 4949 - 균형 잡힌 세상 (0) | 2025.02.08 |
[백준] 10845 - 큐 (0) | 2025.02.06 |
[백준] 17608 - 막대기 (0) | 2025.02.05 |
[백준] 10828 - 스택 (0) | 2025.02.04 |