2022 한국정보올림피아드(KOI) 1차 대회 2교시 초등부

아두위키 : Arduwiki


한국 정보올림피아드(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)

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