<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://arduwiki.com/html/index.php?action=history&amp;feed=atom&amp;title=2024_%ED%95%9C%EA%B5%AD%EC%A0%95%EB%B3%B4%EC%98%AC%EB%A6%BC%ED%94%BC%EC%95%84%EB%93%9C%28KOI%29_2%EC%B0%A8_%EB%8C%80%ED%9A%8C_%EC%A4%91%EB%93%B1%EB%B6%80</id>
	<title>2024 한국정보올림피아드(KOI) 2차 대회 중등부 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://arduwiki.com/html/index.php?action=history&amp;feed=atom&amp;title=2024_%ED%95%9C%EA%B5%AD%EC%A0%95%EB%B3%B4%EC%98%AC%EB%A6%BC%ED%94%BC%EC%95%84%EB%93%9C%28KOI%29_2%EC%B0%A8_%EB%8C%80%ED%9A%8C_%EC%A4%91%EB%93%B1%EB%B6%80"/>
	<link rel="alternate" type="text/html" href="https://arduwiki.com/html/index.php?title=2024_%ED%95%9C%EA%B5%AD%EC%A0%95%EB%B3%B4%EC%98%AC%EB%A6%BC%ED%94%BC%EC%95%84%EB%93%9C(KOI)_2%EC%B0%A8_%EB%8C%80%ED%9A%8C_%EC%A4%91%EB%93%B1%EB%B6%80&amp;action=history"/>
	<updated>2026-04-21T08:14:04Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.40.1</generator>
	<entry>
		<id>https://arduwiki.com/html/index.php?title=2024_%ED%95%9C%EA%B5%AD%EC%A0%95%EB%B3%B4%EC%98%AC%EB%A6%BC%ED%94%BC%EC%95%84%EB%93%9C(KOI)_2%EC%B0%A8_%EB%8C%80%ED%9A%8C_%EC%A4%91%EB%93%B1%EB%B6%80&amp;diff=2857&amp;oldid=prev</id>
		<title>2026년 4월 20일 (월) 07:26에 ArduWiki님의 편집</title>
		<link rel="alternate" type="text/html" href="https://arduwiki.com/html/index.php?title=2024_%ED%95%9C%EA%B5%AD%EC%A0%95%EB%B3%B4%EC%98%AC%EB%A6%BC%ED%94%BC%EC%95%84%EB%93%9C(KOI)_2%EC%B0%A8_%EB%8C%80%ED%9A%8C_%EC%A4%91%EB%93%B1%EB%B6%80&amp;diff=2857&amp;oldid=prev"/>
		<updated>2026-04-20T07:26:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ko&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 이전 판&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2026년 4월 20일 (월) 16:26 판&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l125&quot;&gt;125번째 줄:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;125번째 줄:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;이렇게 아주 &amp;#039;&amp;#039;&amp;#039;큰 데이터 범위로 인한 몇 가지 함정&amp;#039;&amp;#039;&amp;#039;을 피해서 완성하면, &amp;#039;&amp;#039;&amp;#039;100점&amp;#039;&amp;#039;&amp;#039;을 획득할 수 있습니다.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;이렇게 아주 &amp;#039;&amp;#039;&amp;#039;큰 데이터 범위로 인한 몇 가지 함정&amp;#039;&amp;#039;&amp;#039;을 피해서 완성하면, &amp;#039;&amp;#039;&amp;#039;100점&amp;#039;&amp;#039;&amp;#039;을 획득할 수 있습니다.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;﻿&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;﻿&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== ﻿📊 정답률﻿ ===&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;﻿초등부에서는 10% 미만이 100점, 조금이라도 부분점수를 받은 학생은 반 이상이었습니다.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;중, 고등부에서는 1번 문제로 출제되어 100점을 받은 학생이 50% 이상, 부분 점수는 대부분 획득한 모습입니다.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;아무래도 초등부 수준에서는 100점을 받을 정도의 알고리즘 완성도나, 함정을 피하는 것에 어려움이 있었던 문제입니다.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key arduwiki:diff::1.12:old-2852:rev-2857 --&gt;
&lt;/table&gt;</summary>
		<author><name>ArduWiki</name></author>
	</entry>
	<entry>
		<id>https://arduwiki.com/html/index.php?title=2024_%ED%95%9C%EA%B5%AD%EC%A0%95%EB%B3%B4%EC%98%AC%EB%A6%BC%ED%94%BC%EC%95%84%EB%93%9C(KOI)_2%EC%B0%A8_%EB%8C%80%ED%9A%8C_%EC%A4%91%EB%93%B1%EB%B6%80&amp;diff=2852&amp;oldid=prev</id>
		<title>ArduWiki: 새 문서: {{#seo:|title=아두위키 : 한국정보올림피아드(KOI) 기출문제 풀이|title_mode=append|keywords=정보올림피아드, 한국정보올림피아드, KOI, 정올, 정올 1차대회, 정올 2차대회, 사고력, 자료구조, 컴퓨팅 사고력, 프로그래밍 대회, 정올 기출, 2024 KOI, 2024 중등부 2차 대회|description=한국정보올림피아드(KOI) 기출 문제 풀이본을 수록합니다.|image=https://arduwiki.com/html/resources/assets/arduwiki.pn...</title>
		<link rel="alternate" type="text/html" href="https://arduwiki.com/html/index.php?title=2024_%ED%95%9C%EA%B5%AD%EC%A0%95%EB%B3%B4%EC%98%AC%EB%A6%BC%ED%94%BC%EC%95%84%EB%93%9C(KOI)_2%EC%B0%A8_%EB%8C%80%ED%9A%8C_%EC%A4%91%EB%93%B1%EB%B6%80&amp;diff=2852&amp;oldid=prev"/>
		<updated>2026-04-15T12:59:37Z</updated>

		<summary type="html">&lt;p&gt;새 문서: {{#seo:|title=아두위키 : 한국정보올림피아드(KOI) 기출문제 풀이|title_mode=append|keywords=정보올림피아드, 한국정보올림피아드, KOI, 정올, 정올 1차대회, 정올 2차대회, 사고력, 자료구조, 컴퓨팅 사고력, 프로그래밍 대회, 정올 기출, 2024 KOI, 2024 중등부 2차 대회|description=한국정보올림피아드(KOI) 기출 문제 풀이본을 수록합니다.|image=https://arduwiki.com/html/resources/assets/arduwiki.pn...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{#seo:|title=아두위키 : 한국정보올림피아드(KOI) 기출문제 풀이|title_mode=append|keywords=정보올림피아드, 한국정보올림피아드, KOI, 정올, 정올 1차대회, 정올 2차대회, 사고력, 자료구조, 컴퓨팅 사고력, 프로그래밍 대회, 정올 기출, 2024 KOI, 2024 중등부 2차 대회|description=한국정보올림피아드(KOI) 기출 문제 풀이본을 수록합니다.|image=https://arduwiki.com/html/resources/assets/arduwiki.png}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;한국 정보올림피아드(KOI) 기출 문제 풀이과정을 수록합니다.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[파일:KOISolution.jpg|link=https://arduwiki.com/wiki/%ED%95%9C%EA%B5%AD%EC%A0%95%EB%B3%B4%EC%98%AC%EB%A6%BC%ED%94%BC%EC%95%84%EB%93%9C(KOI)|한국정보올림피아드(KOI) 기출 문제 풀이 모음|center|class=coders100]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;[https://codersit.co.kr/oj/problems/1689 1. 가로등 (초2/중1/고1)]&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
제목 링크를 통해 문제를 확인해주세요.&lt;br /&gt;
&lt;br /&gt;
=== 📄 문제 개요 ===&lt;br /&gt;
수직선 도로 위에 N개의 가로등이 켜져 있습니다. 도로의 끝은 L로 아주 깁니다.&lt;br /&gt;
&lt;br /&gt;
어떤 위치의 &amp;#039;&amp;#039;&amp;#039;어두운 정도&amp;#039;&amp;#039;&amp;#039;는 그 위치에서 &amp;#039;&amp;#039;&amp;#039;가장 가까운 가로등까지의 거리&amp;#039;&amp;#039;&amp;#039;를 뜻합니다.&lt;br /&gt;
&lt;br /&gt;
[[파일:2024KOI가로등1.png|center|class=coders100]]&lt;br /&gt;
&lt;br /&gt;
예를 들어 3, 6번 위치에 가로등이 있다면 그림과 같이 가로등이 있는 위치(p=0)을 시작으로 어두운 정도를 표시하게 됩니다.&lt;br /&gt;
&lt;br /&gt;
0부터 L까지 모든 위치의 어두운 정도를 구했을 때, &amp;#039;&amp;#039;&amp;#039;가장 작은 값부터 K번째로 작은 값&amp;#039;&amp;#039;&amp;#039;까지 차례대로 출력해야 합니다.&lt;br /&gt;
&lt;br /&gt;
﻿&lt;br /&gt;
&lt;br /&gt;
=== 💡 첫 번째 접근 - 모든 위치 직접 탐색하기 ===&lt;br /&gt;
가장 먼저 떠올릴 수 있는 직관적인 방법은 0부터 L까지 도로 위를 직접 걸어가며, 각 위치마다 모든 가로등과의 거리를 계산해 보는 것입니다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 각 위치(pos)에서 가로등까지의 거리들을 모두 구한 뒤, 그중 가장 짧은 거리가 그 위치의 어두운 정도가 됩니다.&lt;br /&gt;
&lt;br /&gt;
[[파일:2024KOI가로등2.png|center|class=coders100]]&lt;br /&gt;
&lt;br /&gt;
﻿﻿이 값들을 리스트에 모아 오름차순으로 정렬한 뒤 앞에서부터 K개를 출력하는 방식입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ﻿💻 코드 구현 - 모든 위치 직접 탐색하기﻿ ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
input = sys.stdin.readline&lt;br /&gt;
&lt;br /&gt;
l, n, k = map(int, input().split())&lt;br /&gt;
a = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
ans = []&lt;br /&gt;
&lt;br /&gt;
# 0부터 L까지 모든 위치 확인&lt;br /&gt;
for pos in range(l + 1):&lt;br /&gt;
    # 현재 위치에서 모든 가로등과의 거리 중 최솟값(어두운 정도) 찾기&lt;br /&gt;
    m = 1000000000000000000 # 이론상 가능한 최대 거리&lt;br /&gt;
    for i in a:&lt;br /&gt;
        m = min(m, abs(pos - i))&lt;br /&gt;
    ans.append(m)&lt;br /&gt;
&lt;br /&gt;
ans.sort() # 오름차순 정렬&lt;br /&gt;
&lt;br /&gt;
# 가장 어두운 정도가 작은 K개 출력&lt;br /&gt;
for i in range(k):&lt;br /&gt;
    print(ans[i])&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;﻿﻿위 코드는 L칸을 일일이 확인하며 N개의 가로등을 매번 비교하므로,&lt;br /&gt;
&lt;br /&gt;
가로등 개수(N)와 도로 길이(L)가 모두 작은 부분문제 2번(N &amp;lt;= 2500, L &amp;lt;= 2500)까지만 무사히 통과하여 &amp;#039;&amp;#039;&amp;#039;20점&amp;#039;&amp;#039;&amp;#039;을 받게 됩니다.&lt;br /&gt;
&lt;br /&gt;
만약 도로 길이가 부분문제 4번(L &amp;lt;= 5,000,000)이나, 사실상 무한하게 커질 수 있는 부분문제 5번의 데이터가 들어오면&lt;br /&gt;
&lt;br /&gt;
이런 방식은 &amp;#039;&amp;#039;&amp;#039;&amp;lt;nowiki/&amp;gt;&amp;#039;시간 초과&amp;#039;&amp;#039;&amp;#039;&amp;#039;가 발생할 수밖에 없습니다. 따라서 100점을 받기 위해서는 탐색 방식을 바꾸어야 합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 💡 두 번째 접근 - 너비 우선 탐색(BFS)﻿ ===&lt;br /&gt;
﻿우리가 출력해야할 것은 가장 밝은(어두운 정도가 가장 낮은) K개의 값입니다.&lt;br /&gt;
&lt;br /&gt;
따라서 가장 밝은 곳&amp;#039;&amp;#039;&amp;#039;(가로등이 있는 위치)&amp;#039;&amp;#039;&amp;#039;부터 영역을 점점 넓혀나가면서 탐색하는 방법을 생각해봅시다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
잔잔한 호수에 돌멩이를 던졌을 때 퍼져나가는 물결을 상상해봅시다.&lt;br /&gt;
&lt;br /&gt;
가로등이 서 있는 위치를 물결의 중심(거리 0)이라고 생각하고, 양옆으로 동시에 1칸씩 영역을 넓혀가는 겁니다.&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;거리 0인 곳:&amp;#039;&amp;#039;&amp;#039; 가로등이 있는 중심 위치들&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;거리 1인 곳:&amp;#039;&amp;#039;&amp;#039; 중심에서 양옆으로 1칸 퍼져나간 위치들&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;거리 2인 곳:&amp;#039;&amp;#039;&amp;#039; 거기서 다시 양옆으로 1칸 더 퍼져나간 위치들&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
도로의 길이와 무관하게 가장 밝은 곳부터 점점 범위를 넓혀나가다가 가장 밝은 K개 값을 찾는 순간 탐색을 종료합니다.&lt;br /&gt;
&lt;br /&gt;
이처럼 가까운 곳부터 동심원처럼 영역을 넓혀가는 방식을 컴퓨터 공학에서는 &amp;#039;&amp;#039;&amp;#039;너비 우선 탐색(BFS)&amp;#039;&amp;#039;&amp;#039;이라고 부릅니다.&lt;br /&gt;
&lt;br /&gt;
[[파일:2024KOI가로등3.png|center|class=coders100]]&lt;br /&gt;
&lt;br /&gt;
=== ﻿﻿💻 코드 구현 - 너비 우선 탐색(BFS) ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
l, n, k = map(int, input().split())&lt;br /&gt;
# 가로등 위치는 탐색 중 변하지 않으므로, 리스트보다 가볍고 빠른 튜플(tuple) 사용&lt;br /&gt;
a = tuple(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
# 100경 크기의 방문 배열 대신, 밟은 좌표만 세트(set) 활용 (메모리 초과 방지)&lt;br /&gt;
visit = set()&lt;br /&gt;
q = deque()&lt;br /&gt;
&lt;br /&gt;
# 1단계: 초기 가로등 위치들을 어두운 정도(거리) 0으로 큐에 모두 삽입, 방문 처리&lt;br /&gt;
for i in a:&lt;br /&gt;
    q.append((i, 0))&lt;br /&gt;
    visit.add(i)&lt;br /&gt;
&lt;br /&gt;
# 2단계: 딱 K번만 정답을 출력하도록 while 조건 설정&lt;br /&gt;
while k &amp;gt; 0:&lt;br /&gt;
    x, p = q.popleft()  # x: 현재 위치, p: 어두운 정도(거리)&lt;br /&gt;
    &lt;br /&gt;
    # 거리가 짧은 곳부터 순서대로 출력됨&lt;br /&gt;
    print(p)&lt;br /&gt;
    k -= 1  # 정답을 출력할 때마다 목표 개수(K)를 1씩 감소&lt;br /&gt;
    &lt;br /&gt;
    # 3단계: 현재 위치 기준 양옆(왼쪽 1칸, 오른쪽 1칸) 탐색&lt;br /&gt;
    for cx in [(x - 1), (x + 1)]:&lt;br /&gt;
        if 0 &amp;lt;= cx &amp;lt;= l: # 도로 범위(0 ~ L) 안에 포함되고&lt;br /&gt;
            if cx not in visit: # 아직 방문하지 않은 위치라면&lt;br /&gt;
                visit.add(cx) # 방문 처리한 후&lt;br /&gt;
                q.append((cx, b + 1))  # 거리를 1 늘려서 큐에 삽입&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;﻿일반적으로 BFS 코드를 작성할 때, 방문 배열(visit = [False] * (L + 1) 형태)를 활용합니다.&lt;br /&gt;
&lt;br /&gt;
하지만 지금의 경우 &amp;#039;&amp;#039;&amp;#039;L 최대 크기(100경)&amp;#039;&amp;#039;&amp;#039;이 너무 크기 때문에 리스트를 활용하면 &amp;#039;&amp;#039;&amp;#039;메모리 초과&amp;#039;&amp;#039;&amp;#039;가 발생합니다.&lt;br /&gt;
&lt;br /&gt;
그래서 이번에는 set 자료구조를 사용해 우리가 &amp;#039;&amp;#039;&amp;#039;실제로 방문한 좌표만 기록&amp;#039;&amp;#039;&amp;#039;함으로써 메모리 낭비를 최소한으로 처리했습니다.&lt;br /&gt;
&lt;br /&gt;
이렇게 아주 &amp;#039;&amp;#039;&amp;#039;큰 데이터 범위로 인한 몇 가지 함정&amp;#039;&amp;#039;&amp;#039;을 피해서 완성하면, &amp;#039;&amp;#039;&amp;#039;100점&amp;#039;&amp;#039;&amp;#039;을 획득할 수 있습니다.&lt;br /&gt;
﻿&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ﻿📊 정답률﻿ ===&lt;br /&gt;
﻿초등부에서는 10% 미만이 100점, 조금이라도 부분점수를 받은 학생은 반 이상이었습니다.&lt;br /&gt;
&lt;br /&gt;
중, 고등부에서는 1번 문제로 출제되어 100점을 받은 학생이 50% 이상, 부분 점수는 대부분 획득한 모습입니다.&lt;br /&gt;
&lt;br /&gt;
아무래도 초등부 수준에서는 100점을 받을 정도의 알고리즘 완성도나, 함정을 피하는 것에 어려움이 있었던 문제입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;2. 색깔 모으기 (초3/중2)&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
추가 예정&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;3. XOR 최대 (중3/고2)&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
추가 예정&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;4. 트리 뽑아내기 (중4/고3)&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
추가 예정&lt;/div&gt;</summary>
		<author><name>ArduWiki</name></author>
	</entry>
</feed>