2023 한국정보올림피아드(KOI) 1차 대회 2교시 초등부: 두 판 사이의 차이
잔글 (→1. 크림빵 (초1)) |
잔글편집 요약 없음 |
||
| 61번째 줄: | 61번째 줄: | ||
| | ||
== '''[https://codersit.co.kr/oj/problems/1500 2. 대피소 (초2/고1)]''' == | == '''[https://codersit.co.kr/oj/problems/1500 2. 대피소 (초2/고1)]''' == | ||
제목 링크를 통해 문제를 확인해주세요. | 제목 링크를 통해 문제를 확인해주세요. | ||
2026년 4월 20일 (월) 17:33 기준 최신판
한국 정보올림피아드(KOI) 기출 문제 풀이과정을 수록합니다.

1. 크림빵 (초1)
제목 링크를 통해 문제를 확인해주세요.
📄 문제 개요
KOI 빵집에서 총 N * K개의 빵을 만들었습니다. 이 빵들을 일렬로 늘어놓고 앞에서부터 K개씩 묶어서 판매하려고 합니다.
- 크림이 있는 빵은 1, 크림이 없는 빵은 0으로 표시됩니다.
- 단, 한 묶음 안에 크림이 없는 빵(0)이 P개 이상 있다면 그 묶음은 불량품으로 간주되어 팔 수 없습니다.
우리는 판매 가능한 빵 묶음의 총 개수를 구해야 합니다.
💡 문제 풀이 시뮬레이션
이 문제를 해결하기 위한 핵심은 일렬로 늘어선 데이터를 일정한 간격(K)으로 정확하게 나누어 검사하는 것입니다.
예를 들어 빵이 3개씩 한 묶음(K=3), 크림 없는 빵이 1개 미만이어야 판매 가능하다고 상상해 봅시다.
주어진 빵의 데이터를 K개씩 끊어서 크림 없는 빵의 개수를 세어보면 판매가능한 빵 묶음 개수를 확인할 수 있습니다.

💻 코드 구현 - K개씩 끊어서 확인하기
# N: 묶음 수, K: 묶음당 빵의 수, P: 불량품 기준 개수
n, k, p = map(int, input().split())
breads = list(map(int, input().split()))
ans = 0
# 0부터 전체 빵 개수(N*K)까지 K칸씩 건너뛰며 묶음의 시작점(i) 설정
for i in range(0, n * k, k):
nocream = 0 # 현재 묶음의 크림 없는 빵(0) 개수를 셀 변수
# 시작점(i)부터 i+k 직전까지 빵을 하나씩 검사
for j in range(i, i + k):
if breads[j] == 0:
nocream += 1 # 크림이 없으면 개수 증가
# 해당 묶음 안의 불량품이 P개 미만이라면 판매 가능
if nocream < p:
ans += 1
print(ans)
전체 빵을 K개씩 끊어 순회하면서 크림없는 빵의 개수를 세고, 불량 여부를 판단하는 것을 중첩 반복의 형태로 표현했습니다.
이번 문제는 빵의 최대 개수(1 <= N <= 50)가 크지 않기 때문에 이 방법으로 충분히 해결 가능합니다.
📊 정답률

2. 대피소 (초2/고1)
제목 링크를 통해 문제를 확인해주세요.
3. 아이템 획득 (초3)
추가 예정