2022 한국정보올림피아드(KOI) 1차 대회 2교시 초등부: 두 판 사이의 차이
(새 문서: {{#seo:|title=아두위키 : 한국정보올림피아드(KOI) 기출문제 풀이|title_mode=append|keywords=정보올림피아드, 한국정보올림피아드, KOI, 정올, 정올 1차대회, 정올 2차대회, 사고력, 자료구조, 컴퓨팅 사고력, 프로그래밍 대회, 정올 기출, 2022 KOI, 2022 초등부 1차 대회 2교시|description=한국정보올림피아드(KOI) 기출 문제 풀이본을 수록합니다.|image=https://arduwiki.com/html/resources/assets/ard...) |
잔글 (→1. 빵 (초1)) |
||
| 8번째 줄: | 8번째 줄: | ||
== '''[https://codersit.co.kr/oj/problems/1369 1. 빵 (초1)]''' == | == '''[https://codersit.co.kr/oj/problems/1369 1. 빵 (초1)]''' == | ||
제목 링크를 통해 문제를 확인해주세요. | 제목 링크를 통해 문제를 확인해주세요. | ||
| |||
=== 📄 문제 개요 === | |||
KOI 마을에 N개의 빵집이 있습니다. 각 빵집에서 KOI 빵을 사려고 합니다. | |||
* 현재 위치에서 i번째 빵집까지 가는 데 걸리는 시간은 a입니다. | |||
* i번째 빵집에 빵이 들어오는 시간은 b입니다. | |||
* 빵집에 도착하는 시간이 빵이 들어오는 시간보다 늦으면(a > b), 빵이 다 팔려 살 수 없습니다. | |||
* '''목표 :''' 빵을 살 수 있는 빵집 중, 가장 일찍 빵을 구할 수 있는 시간(최소 b)을 구해야 합니다. 모든 빵집에서 빵을 살 수 없다면 -1을 출력합니다. | |||
=== 💡 문제 풀이 시뮬레이션 === | |||
이 문제는 시간이 흘러가는 것을 복잡하게 시뮬레이션할 필요 없이, 주어진 두 변수(a, b)의 대소 관계만 비교하면 되는 문제입니다. | |||
빵을 사기 위해 체크해야할 필수 조건은 '''내가 빵집에 도착하는 시간(a)이 빵이 나오는 시간(b)보다 작거나 같아야 한다'''는 것입니다. | |||
따라서 우리가 할 일은 다음과 같습니다. | |||
# 모든 빵집을 순서대로 확인하며, a <= b 조건을 만족하는지(빵을 살 수 있는지) 검사합니다. | |||
# 조건을 만족하는 빵집들 중에서, 빵이 나오는 시간(b)이 가장 작은 값을 찾습니다. | |||
# 만약 조건을 만족하는 빵집이 단 하나도 없다면 -1을 출력하도록 예외 처리를 해줍니다. | |||
| | ||
| |||
=== 💻 코드 구현'''''' === | |||
<syntaxhighlight lang="python3" line="1"> | |||
n = int(input()) | |||
# 시간(b)의 최댓값이 1000이므로, 절대 정답이 될 수 없는 1001을 초기값으로 설정 | |||
ans = 1001 | |||
# N개의 빵집을 하나씩 확인 | |||
for i in range(n): | |||
a, b = map(int, input().split()) | |||
if a <= b: # 빵집에 도착하는 시간(a)이 빵이 나오는 시간(b)보다 작거나 같을 때만 구매 가능 | |||
if b < ans: # 기존에 찾은 시간보다 더 빨리 나오는 곳을 발견했다면 갱신 | |||
ans = b | |||
if ans == 1001: # ans가 여전히 1001이라면(살 수 있는 빵이 없었다) -1 출력 | |||
print(-1) | |||
else: | |||
print(ans) | |||
</syntaxhighlight>최소값을 구하는 상황에서 ans의 초기값을 무한대('''float('inf')''')로 잡아도 무방합니다. | |||
하지만 평소 연습할 때 문제 데이터 제한 크기를 확인하여 논리적인 상/하한선을 설정해주면 좋은 공부가 됩니다. | |||
| |||
== '''[https://codersit.co.kr/oj/problems/1464 2. 조약돌 (초2)]''' == | == '''[https://codersit.co.kr/oj/problems/1464 2. 조약돌 (초2)]''' == | ||
제목 링크를 통해 문제를 확인해주세요. | 제목 링크를 통해 문제를 확인해주세요. | ||
2026년 4월 28일 (화) 20:47 기준 최신판
한국 정보올림피아드(KOI) 기출 문제 풀이과정을 수록합니다.

1. 빵 (초1)
제목 링크를 통해 문제를 확인해주세요.
📄 문제 개요
KOI 마을에 N개의 빵집이 있습니다. 각 빵집에서 KOI 빵을 사려고 합니다.
- 현재 위치에서 i번째 빵집까지 가는 데 걸리는 시간은 a입니다.
- i번째 빵집에 빵이 들어오는 시간은 b입니다.
- 빵집에 도착하는 시간이 빵이 들어오는 시간보다 늦으면(a > b), 빵이 다 팔려 살 수 없습니다.
- 목표 : 빵을 살 수 있는 빵집 중, 가장 일찍 빵을 구할 수 있는 시간(최소 b)을 구해야 합니다. 모든 빵집에서 빵을 살 수 없다면 -1을 출력합니다.
💡 문제 풀이 시뮬레이션
이 문제는 시간이 흘러가는 것을 복잡하게 시뮬레이션할 필요 없이, 주어진 두 변수(a, b)의 대소 관계만 비교하면 되는 문제입니다.
빵을 사기 위해 체크해야할 필수 조건은 내가 빵집에 도착하는 시간(a)이 빵이 나오는 시간(b)보다 작거나 같아야 한다는 것입니다.
따라서 우리가 할 일은 다음과 같습니다.
- 모든 빵집을 순서대로 확인하며, a <= b 조건을 만족하는지(빵을 살 수 있는지) 검사합니다.
- 조건을 만족하는 빵집들 중에서, 빵이 나오는 시간(b)이 가장 작은 값을 찾습니다.
- 만약 조건을 만족하는 빵집이 단 하나도 없다면 -1을 출력하도록 예외 처리를 해줍니다.
💻 코드 구현
n = int(input())
# 시간(b)의 최댓값이 1000이므로, 절대 정답이 될 수 없는 1001을 초기값으로 설정
ans = 1001
# N개의 빵집을 하나씩 확인
for i in range(n):
a, b = map(int, input().split())
if a <= b: # 빵집에 도착하는 시간(a)이 빵이 나오는 시간(b)보다 작거나 같을 때만 구매 가능
if b < ans: # 기존에 찾은 시간보다 더 빨리 나오는 곳을 발견했다면 갱신
ans = b
if ans == 1001: # ans가 여전히 1001이라면(살 수 있는 빵이 없었다) -1 출력
print(-1)
else:
print(ans)
최소값을 구하는 상황에서 ans의 초기값을 무한대(float('inf'))로 잡아도 무방합니다.
하지만 평소 연습할 때 문제 데이터 제한 크기를 확인하여 논리적인 상/하한선을 설정해주면 좋은 공부가 됩니다.
2. 조약돌 (초2)
제목 링크를 통해 문제를 확인해주세요.