2022 한국정보올림피아드(KOI) 1차 대회 2교시 초등부: 두 판 사이의 차이

아두위키 : Arduwiki
(새 문서: {{#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...)
 
 
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) 기출 문제 풀이과정을 수록합니다.

한국정보올림피아드(KOI) 기출 문제 풀이 모음
한국정보올림피아드(KOI) 기출 문제 풀이 모음


1. 빵 (초1)

제목 링크를 통해 문제를 확인해주세요.



📄 문제 개요

KOI 마을에 N개의 빵집이 있습니다. 각 빵집에서 KOI 빵을 사려고 합니다.

  • 현재 위치에서 i번째 빵집까지 가는 데 걸리는 시간은 a입니다.
  • i번째 빵집에 빵이 들어오는 시간은 b입니다.
  • 빵집에 도착하는 시간이 빵이 들어오는 시간보다 늦으면(a > b), 빵이 다 팔려 살 수 없습니다.
  • 목표 : 빵을 살 수 있는 빵집 중, 가장 일찍 빵을 구할 수 있는 시간(최소 b)을 구해야 합니다. 모든 빵집에서 빵을 살 수 없다면 -1을 출력합니다.


💡 문제 풀이 시뮬레이션

이 문제는 시간이 흘러가는 것을 복잡하게 시뮬레이션할 필요 없이, 주어진 두 변수(a, b)의 대소 관계만 비교하면 되는 문제입니다.

빵을 사기 위해 체크해야할 필수 조건은 내가 빵집에 도착하는 시간(a)이 빵이 나오는 시간(b)보다 작거나 같아야 한다는 것입니다.

따라서 우리가 할 일은 다음과 같습니다.

  1. 모든 빵집을 순서대로 확인하며, a <= b 조건을 만족하는지(빵을 살 수 있는지) 검사합니다.
  2. 조건을 만족하는 빵집들 중에서, 빵이 나오는 시간(b)이 가장 작은 값을 찾습니다.
  3. 만약 조건을 만족하는 빵집이 단 하나도 없다면 -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)

제목 링크를 통해 문제를 확인해주세요.