Files
CodeObject/storage/zeta/_static/2733.html
2026-04-27 09:44:16 +09:00

183 lines
7.2 KiB
HTML

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>BOJ 2733 - Offline</title>
<style>
:root {
--bg: #fafaf8;
--paper: #ffffff;
--ink: #1e1f24;
--muted: #6a6d75;
--line: #d8dce3;
--accent: #0d6e6e;
--code-bg: #f4f6fb;
}
* { box-sizing: border-box; }
body {
margin: 0;
background:
radial-gradient(circle at 15% 0%, #f0efe9 0%, transparent 42%),
radial-gradient(circle at 85% 20%, #e7f1f2 0%, transparent 38%),
var(--bg);
color: var(--ink);
font-family: "Noto Sans KR", "Pretendard", "Apple SD Gothic Neo", sans-serif;
line-height: 1.65;
}
main {
max-width: 980px;
margin: 0 auto;
padding: 24px 16px 56px;
}
.header {
background: var(--paper);
border: 1px solid var(--line);
border-radius: 14px;
padding: 18px 20px;
margin-bottom: 18px;
}
.header h1 { margin: 0 0 6px; font-size: 1.5rem; }
.header p { margin: 0; color: var(--muted); font-size: 0.95rem; }
.header a { color: var(--accent); text-decoration: none; }
.section {
background: var(--paper);
border: 1px solid var(--line);
border-radius: 14px;
padding: 16px 18px;
margin-bottom: 14px;
overflow-x: auto;
}
h2 {
margin: 0 0 10px;
font-size: 1.05rem;
color: var(--accent);
border-bottom: 1px solid var(--line);
padding-bottom: 8px;
}
pre, code {
font-family: "JetBrains Mono", "Fira Code", monospace;
background: var(--code-bg);
}
pre {
padding: 12px;
border-radius: 10px;
border: 1px solid #e7ebf2;
overflow: auto;
}
blockquote {
margin: 14px 0;
padding: 16px 16px 14px 22px;
border-left: 4px solid var(--accent);
border-radius: 10px;
background: linear-gradient(90deg, #eef8f8 0%, #f9fdfd 100%);
color: #24313a;
font-weight: 600;
position: relative;
}
blockquote::before {
content: "“";
position: absolute;
left: 8px;
top: 2px;
font-size: 1.35rem;
line-height: 1;
color: #0b5f5f;
opacity: 0.7;
}
blockquote > :first-child { margin-top: 0; }
blockquote > :last-child { margin-bottom: 0; }
q {
color: #114f50;
font-weight: 700;
background: #edf8f8;
border-radius: 6px;
padding: 0 4px;
}
.math-inline math {
font-size: 1em;
vertical-align: middle;
}
.math-block {
margin: 10px 0;
padding: 8px 10px;
overflow-x: auto;
background: #f8fbff;
border: 1px solid #e2ecf8;
border-radius: 8px;
}
.math-block math {
font-size: 1.04em;
display: block;
}
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid var(--line); padding: 6px 8px; }
img { max-width: 100%; height: auto; }
</style>
</head>
<body>
<main>
<header class="header">
<h1>Brainf*ck</h1>
</header>
<article class="section">
<h2>문제</h2>
<p>Brainf*ck은 Urban M&uuml;ller가 1993년에 만든 프로그래밍 언어이다. 그의 목적은 역사상 가장 작은 튜링 완전 언어(Turing -complete language)의 컴파일러를 만드는 것이었다.<a href="https://en.wikipedia.org/wiki/Brainfuck">위키백과</a>에는 다음과 같은 설명이 적혀져 있다. (designed to challenge and amuse programmers, and was not made to be suitable for practical use)</p>
<p>이 언어는 0으로 초기화 된 크기가 32768바이트인 바이트 배열, 배열의 맨 첫 바이트를 가리키는 포인터를 가지고 있다.</p>
<p>다음과 같이 7가지 명령어를 가지고 있으며, 각 명령어는 문자 1글자이다. (원래 8가지 명령어를 가지고 있지만, 문제를 위해 하나를 지웠다)</p>
<ul>
<li><code>&gt;</code>: 포인터를 증가시킨다. 만약, 포인터 값이 32767이면 0이된다.</li>
<li><code>&lt;</code>: 포인터를 감소시킨다. 만약, 포인터 값이 0이면 32767이 된다.</li>
<li><code>+</code>: 포인터가 가리키는 값을 증가시킨다. 255를 증가시키면 0이 된다.</li>
<li><code>-</code>: 포인터가 가리키는 값을 감소시킨다. 0을 감소시키면 255가 된다.</li>
<li><code>.</code>: 포인터가 가리키는 값을 ASCII문자로 출력한다.</li>
<li><code>[</code>: 포인터가 가리키는 값이 0이면, 짝이 되는 뒤쪽의 ]로 이동한다.</li>
<li><code>]</code>: 포인터가 가리키는 값이 0이 아니면, 짝이되는 앞쪽의 [로 이동한다.</li>
</ul>
<p>Brainf*ck 프로그램이 주어졌을 때, 이 프로그램의 출력을 출력하는 프로그램을 작성하시오.</p>
</article>
<article class="section">
<h2>입력</h2>
<p>첫째 줄에 프로그램의 개수 T(1 &le; T &le; 100)가 주어진다. 각 프로그램은 한줄 또는 그 이상으로 구성되어 있으며, <code>end</code>만 적혀있는 줄로 끝난다. 프로그램에 올바르지 않은 문자 (<code>&lt;&gt;+-.[]</code>)가 있다면, 이는 무시하고 넘어가야 한다. <code>%</code>는 주석을 의미하며, <code>%</code>가 나온 뒤에 나오는 해당 줄의 문자는 모두 무시한다. 프로그램의 최대 명령어 개수는 128,000이다.</p>
</article>
<article class="section">
<h2>출력</h2>
<p>각 프로그램의 결과를 다음과 같이 출력한다. 첫째 줄에 <code>PROGRAM #n</code>을 출력한다. <code>n</code>은 프로그램 번호이다. (첫 번째 프로그램부터 차례대로 1이고, 1 &le; <code>n</code> &le; N이다). 둘째 줄에는 프로그램의 결과를 출력한다. 만약 <code>[</code><code>]</code>가 짝이 맞지 않을 대는 <code>COMPILE ERROR</code>를 출력하면 된다. 출력에서 여러 줄을 출력할 수도 있다.</p>
</article>
<article class="section">
<h2>예제 입력 1 복사</h2>
<pre class="sampledata" id="sample-input-1">3
++++++++[&gt;+++++++++ % hello-world.
&lt;-]&gt;.&lt;+++++[&gt;++++++&lt;-]&gt;-.+++++++..
+++.&lt;++++++++[&gt;&gt;++++&lt;&lt;-]&gt;&gt;.&lt;&lt;++++[&gt;
------&lt;-]&gt;.&lt;++++[&gt;++++++&lt;-]&gt;.+++.
------.--------.&gt;+.
end
+++[&gt;+++++++[.
end
%% Print alphabet, A-Z.
+ + + + + +++++++++++++++++++++&gt;
++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++
+&lt; [ &gt;.+&lt;- ]
end
</pre>
</article>
<article class="section">
<h2>예제 출력 1 복사</h2>
<pre class="sampledata" id="sample-output-1">PROGRAM #1:
Hello World!
PROGRAM #2:
COMPILE ERROR
PROGRAM #3:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
</pre>
</article>
</main>
</body>
</html>