195 lines
7.8 KiB
HTML
195 lines
7.8 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 25513 - 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>빠른 오름차순 숫자 탐색</h1>
|
|
</header>
|
|
<article class="section">
|
|
<h2>문제</h2>
|
|
<p>5 x 5 크기의 보드가 주어진다. 보드는 1 x 1 크기의 정사각형 격자로 이루어져 있다. 보드의 격자에는 <strong>-1, 0, 1, 2, 3, 4, 5, 6</strong>중 하나의 수가 적혀 있다. 격자의 위치는 (r, c)로 표시한다. r은 행 번호, c는 열 번호를 나타낸다. 행 번호는 맨 위 위치가 0이고 아래 방향으로 1씩 증가한다. 열 번호는 맨 왼쪽 위치가 0이고 오른쪽으로 1씩 증가한다. 즉, 맨 왼쪽 위 위치가 (0, 0), 맨 아래 오른쪽 위치가 (4, 4)이다. -1이 적혀 있는 칸으로는 이동할 수 없고 0, 1, 2, 3, 4, 5, 6이 적혀 있는 칸으로는 이동할 수 있다.</p>
|
|
|
|
<p>현재 한 명의 학생이 (<em>r</em>, <em>c</em>) 위치에 있고 한 번의 이동으로 상, 하, 좌, 우 방향 중에서 한가지 방향으로 한 칸 이동할 수 있다. 학생이 현재 위치 (<em>r</em>, <em>c</em>)에서 시작하여 1, 2, 3, 4, 5, 6이 적혀 있는 칸을 순서대로 방문하려고 한다. 보드에는 1, 2, 3, 4, 5, 6이 적혀 있는 칸이 1개씩 존재하고 1, 2, 3, 4, 5, 6이 적혀 있는 칸을 여러 번 방문할 수 있다. 즉, 1이 적혀 있는 칸에서 2가 적혀 있는 칸으로 이동하고, 2가 적혀 있는 칸에서 3이 적혀 있는 칸으로 이동하고, ... , 5가 적혀 있는 칸에서 6이 적혀 있는 칸으로 이동한다. <em>i</em>가 적혀 있는 칸에서 <em>i </em>+ 1이 적혀 있는 칸으로 이동할 때 다른 번호가 적힌 칸을 방문해도 된다.(1 ≤ <em>i</em> ≤ 5) 마찬가지로, 현재 위치 (r, c)에서 1이 적혀 있는 칸으로 이동할 때 다른 번호가 적힌 칸을 방문해도 된다. <strong>학생이 현재 위치 (<em>r</em>, <em>c</em>)에서 시작하여 1, 2, 3, 4, 5, 6이 적혀 있는 칸을 순서대로 방문하는 최소 이동 횟수를 출력하자.</strong> 학생이 현재 위치 (<em>r</em>, <em>c</em>)에서 시작하여 1, 2, 3, 4, 5, 6이 적혀 있는 칸을 순서대로 방문할 수 없는 경우 -1을 출력한다.</p>
|
|
</article>
|
|
<article class="section">
|
|
<h2>입력</h2>
|
|
<p>첫 번째 줄부터 다섯 개의 줄에 걸쳐 보드의 각 칸에 적혀있는 수가 순서대로 주어진다. <em>i</em>번째 줄의 <em>j</em>번째 수는 보드의 (<em>i</em> - 1)번째 행, (<em>j</em> - 1)번째 열에 적혀있는 수를 나타낸다. 보드의 각 칸에 적혀 있는 수는 -1, 0, 1, 2, 3, 4, 5, 6중 하나이다.</p>
|
|
|
|
<p>다음 줄에 학생의 현재 위치 <em>r</em>, <em>c</em>가 빈칸을 사이에 두고 순서대로 주어진다.</p>
|
|
</article>
|
|
<article class="section">
|
|
<h2>출력</h2>
|
|
<p>학생이 현재 위치 (<em>r</em>, <em>c</em>)에서 시작하여 1, 2, 3, 4, 5, 6이 적혀 있는 칸을 순서대로 방문하는 최소 이동 횟수를 출력한다. 학생이 현재 위치 (<em>r</em>, <em>c</em>)에서 시작하여 1, 2, 3, 4, 5, 6이 적혀 있는 칸을 순서대로 방문할 수 없는 경우 -1을 출력한다.</p>
|
|
</article>
|
|
<article class="section">
|
|
<h2>제한</h2>
|
|
<ul>
|
|
<li>0 ≤ <em>r</em>, <em>c</em> ≤ 4</li>
|
|
<li>학생의 현재 위치 (<em>r</em>, <em>c</em>)에는 0이 적혀 있다.</li>
|
|
<li>1, 2, 3, 4, 5, 6이 적혀 있는 칸이 1개씩 주어진다.</li>
|
|
</ul>
|
|
</article>
|
|
<article class="section">
|
|
<h2>예제 입력 1 복사</h2>
|
|
<pre class="sampledata" id="sample-input-1">0 0 1 0 0
|
|
0 0 2 0 0
|
|
0 0 3 0 0
|
|
0 0 4 0 0
|
|
0 0 5 6 -1
|
|
0 1
|
|
</pre>
|
|
</article>
|
|
<article class="section">
|
|
<h2>예제 입력 2 복사</h2>
|
|
<pre class="sampledata" id="sample-input-2">0 0 1 0 0
|
|
0 0 2 0 0
|
|
0 0 3 0 0
|
|
0 0 4 6 0
|
|
0 0 5 -1 0
|
|
0 1
|
|
</pre>
|
|
</article>
|
|
<article class="section">
|
|
<h2>예제 입력 3 복사</h2>
|
|
<pre class="sampledata" id="sample-input-3">0 0 -1 1 0
|
|
0 0 -1 2 0
|
|
0 0 -1 3 0
|
|
0 0 -1 4 0
|
|
0 0 -1 5 6
|
|
0 1
|
|
</pre>
|
|
</article>
|
|
<article class="section">
|
|
<h2>예제 출력 1 복사</h2>
|
|
<pre class="sampledata" id="sample-output-1">6
|
|
</pre>
|
|
</article>
|
|
<article class="section">
|
|
<h2>예제 출력 2 복사</h2>
|
|
<pre class="sampledata" id="sample-output-2">7
|
|
</pre>
|
|
</article>
|
|
<article class="section">
|
|
<h2>예제 출력 3 복사</h2>
|
|
<pre class="sampledata" id="sample-output-3">-1
|
|
</pre>
|
|
</article>
|
|
</main>
|
|
</body>
|
|
</html>
|