일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 웹브라우저 수용도
- 우아한테크
- 배열 3요소
- 웹 브라우저 전쟁
- 크롤링
- 숫자 형식
- html
- 키-값 데이터베이스
- 숫자형식오류
- SQL입문
- 페이지분석
- 자바 예외
- DoitSQL
- DoitSQL입문
- 함수 선언
- 함수
- 데이터베이스
- 크롤링 오류
- 생성자
- R1C3
- 배열 예제
- Doit입문SQL
- HTML역사
- DoIt
- 예외
- 자바
- SQL
- 자바 오류
- 예제
- dbms
Archives
- Today
- Total
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 웹브라우저 수용도
- 우아한테크
- 배열 3요소
- 웹 브라우저 전쟁
- 크롤링
- 숫자 형식
- html
- 키-값 데이터베이스
- 숫자형식오류
- SQL입문
- 페이지분석
- 자바 예외
- DoitSQL
- DoitSQL입문
- 함수 선언
- 함수
- 데이터베이스
- 크롤링 오류
- 생성자
- R1C3
- 배열 예제
- Doit입문SQL
- HTML역사
- DoIt
- 예외
- 자바
- SQL
- 자바 오류
- 예제
- dbms
Archives
- Today
- Total
프로그래밍
[백준] 12789번: 도키도키 간식드리미 (Python) 본문
728x90
반응형
2025.01.03.금
12789번: 도키도키 간식드리미
문제
줄 서있는 곳이나 대기열이나 맨 앞 사람만 이동할 수 있고
대기열에서 줄 서있는 곳으로 가지 못 한다는 사실만 알면 쉽다
Queue나 Stack을 사용해도 되지만 단순하게 파이썬의 리스트만 활용하여 풀어보았다
풀이방식
학생 수와 학생들이 줄을 선 순서를 입력받아 저장한다
대기공간인 리스트(queue)와 현재 나눠줄 번호표인 변수(num)를 선언한다
학생들 줄 순서와 대기공간이 있을 경우 다음을 반복한다
대기줄 맨 앞 학생의 번호표가 현재 번호표와 일치하는 경우
대기줄에서 pop()을 통해 제거한다
※학생줄에서 대기줄로 넘기는 방식이기 때문에 대기줄과 일치하는지 먼저 검사한다
학생줄 맨 앞 학생의 번호표가 현재 번호표와 일치하는 경우
학생줄에서 pop()을 통해 제거
학생줄 맨 앞 학생의 번호표가 현재 번호표와 일치하지 않는 경우
학생줄에서 대기줄 맨앞으로 보낸다
만족하는 경우가 없으면
즉, 더이상 대기줄이나 학생줄의 맨앞 학생이 번호표와 일치하지 않으며 학생줄이 없을시
대기줄로 넘기지도 못해 고정되었으므로 반복문을 종료한다
나누어준 번호표와 학생수를 비교하여 모든 학생이 받았는지 확인한 후
모든 학생이 받았으면 "Nice"를 그렇지 않으면 "Sad"를 출력한다
n = int(input()) # 학생 수
ticket_list = list(map(int, input().split())) # 학생들 줄 순서
queue = [] # 대기 공간
num = 1 # 현재 와야 할 학생의 번호표
while ticket_list or queue:
# queue의 맨 앞 학생이 현재 번호와 맞는 경우
if queue and queue[-1] == num:
queue.pop() # queue에서 제거
num += 1
# ticket_list의 맨 앞 학생이 현재 번호와 맞는 경우
elif ticket_list and ticket_list[0] == num:
ticket_list.pop(0) # ticket_list에서 제거
num += 1
# queue로 이동
elif ticket_list:
queue.append(ticket_list.pop(0))
else:
break
# 모든 학생이 순서대로 간식을 받았는지 확인
if num - 1 == n:
print("Nice")
else:
print("Sad")
728x90
반응형
Comments