|
| 1 | +# [level 1] 대충 만든 자판 - 160586 |
| 2 | + |
| 3 | +[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/160586) |
| 4 | + |
| 5 | +### 성능 요약 |
| 6 | + |
| 7 | +메모리: 9.29 MB, 시간: 1.57 ms |
| 8 | + |
| 9 | +### 구분 |
| 10 | + |
| 11 | +코딩테스트 연습 > 연습문제 |
| 12 | + |
| 13 | +### 채점결과 |
| 14 | + |
| 15 | +정확성: 100.0<br/>합계: 100.0 / 100.0 |
| 16 | + |
| 17 | +### 제출 일자 |
| 18 | + |
| 19 | +2026년 01월 09일 17:28:25 |
| 20 | + |
| 21 | +### 문제 설명 |
| 22 | + |
| 23 | +<p>휴대폰의 자판은 컴퓨터 키보드 자판과는 다르게 하나의 키에 여러 개의 문자가 할당될 수 있습니다. 키 하나에 여러 문자가 할당된 경우, 동일한 키를 연속해서 빠르게 누르면 할당된 순서대로 문자가 바뀝니다. </p> |
| 24 | + |
| 25 | +<p>예를 들어, 1번 키에 "A", "B", "C" 순서대로 문자가 할당되어 있다면 1번 키를 한 번 누르면 "A", 두 번 누르면 "B", 세 번 누르면 "C"가 되는 식입니다. </p> |
| 26 | + |
| 27 | +<p>같은 규칙을 적용해 아무렇게나 만든 휴대폰 자판이 있습니다. 이 휴대폰 자판은 키의 개수가 1개부터 최대 100개까지 있을 수 있으며, 특정 키를 눌렀을 때 입력되는 문자들도 무작위로 배열되어 있습니다. 또, 같은 문자가 자판 전체에 여러 번 할당된 경우도 있고, 키 하나에 같은 문자가 여러 번 할당된 경우도 있습니다. 심지어 아예 할당되지 않은 경우도 있습니다. 따라서 몇몇 문자열은 작성할 수 없을 수도 있습니다. </p> |
| 28 | + |
| 29 | +<p>이 휴대폰 자판을 이용해 특정 문자열을 작성할 때, 키를 최소 몇 번 눌러야 그 문자열을 작성할 수 있는지 알아보고자 합니다. </p> |
| 30 | + |
| 31 | +<p>1번 키부터 차례대로 할당된 문자들이 순서대로 담긴 문자열배열 <code>keymap</code>과 입력하려는 문자열들이 담긴 문자열 배열 <code>targets</code>가 주어질 때, 각 문자열을 작성하기 위해 키를 최소 몇 번씩 눌러야 하는지 순서대로 배열에 담아 return 하는 solution 함수를 완성해 주세요. </p> |
| 32 | + |
| 33 | +<p>단, 목표 문자열을 작성할 수 없을 때는 -1을 저장합니다.</p> |
| 34 | + |
| 35 | +<hr> |
| 36 | + |
| 37 | +<h5>제한사항</h5> |
| 38 | + |
| 39 | +<ul> |
| 40 | +<li>1 ≤ <code>keymap</code>의 길이 ≤ 100 |
| 41 | + |
| 42 | +<ul> |
| 43 | +<li>1 ≤ <code>keymap</code>의 원소의 길이 ≤ 100</li> |
| 44 | +<li><code>keymap[i]</code>는 i + 1번 키를 눌렀을 때 순서대로 바뀌는 문자를 의미합니다. |
| 45 | + |
| 46 | +<ul> |
| 47 | +<li>예를 들어 <code>keymap[0]</code> = "ABACD" 인 경우 1번 키를 한 번 누르면 A, 두 번 누르면 B, 세 번 누르면 A 가 됩니다.</li> |
| 48 | +</ul></li> |
| 49 | +<li><code>keymap</code>의 원소의 길이는 서로 다를 수 있습니다.</li> |
| 50 | +<li><code>keymap</code>의 원소는 알파벳 대문자로만 이루어져 있습니다.</li> |
| 51 | +</ul></li> |
| 52 | +<li>1 ≤ <code>targets</code>의 길이 ≤ 100 |
| 53 | + |
| 54 | +<ul> |
| 55 | +<li>1 ≤ <code>targets</code>의 원소의 길이 ≤ 100</li> |
| 56 | +<li><code>targets</code>의 원소는 알파벳 대문자로만 이루어져 있습니다.</li> |
| 57 | +</ul></li> |
| 58 | +</ul> |
| 59 | + |
| 60 | +<hr> |
| 61 | + |
| 62 | +<h5>입출력 예</h5> |
| 63 | +<table class="table"> |
| 64 | + <thead><tr> |
| 65 | +<th>keymap</th> |
| 66 | +<th>targets</th> |
| 67 | +<th>result</th> |
| 68 | +</tr> |
| 69 | +</thead> |
| 70 | + <tbody><tr> |
| 71 | +<td>["ABACD", "BCEFD"]</td> |
| 72 | +<td>["ABCD","AABB"]</td> |
| 73 | +<td>[9, 4]</td> |
| 74 | +</tr> |
| 75 | +<tr> |
| 76 | +<td>["AA"]</td> |
| 77 | +<td>["B"]</td> |
| 78 | +<td>[-1]</td> |
| 79 | +</tr> |
| 80 | +<tr> |
| 81 | +<td>["AGZ", "BSSS"]</td> |
| 82 | +<td>["ASA","BGZ"]</td> |
| 83 | +<td>[4, 6]</td> |
| 84 | +</tr> |
| 85 | +</tbody> |
| 86 | + </table> |
| 87 | +<hr> |
| 88 | + |
| 89 | +<h5>입출력 예 설명</h5> |
| 90 | + |
| 91 | +<p>입출력 예 #1 </p> |
| 92 | + |
| 93 | +<ul> |
| 94 | +<li>"ABCD"의 경우, </li> |
| 95 | +<li>1번 키 한 번 → A </li> |
| 96 | +<li>2번 키 한 번 → B </li> |
| 97 | +<li>2번 키 두 번 → C </li> |
| 98 | +<li>1번 키 다섯 번 → D </li> |
| 99 | +<li>따라서 총합인 9를 첫 번째 인덱스에 저장합니다. </li> |
| 100 | +<li>"AABB"의 경우, </li> |
| 101 | +<li>1번 키 한 번 → A </li> |
| 102 | +<li>1번 키 한 번 → A </li> |
| 103 | +<li>2번 키 한 번 → B </li> |
| 104 | +<li>2번 키 한 번 → B </li> |
| 105 | +<li>따라서 총합인 4를 두 번째 인덱스에 저장합니다. </li> |
| 106 | +<li>결과적으로 [9,4]를 return 합니다. </li> |
| 107 | +</ul> |
| 108 | + |
| 109 | +<p>입출력 예 #2 </p> |
| 110 | + |
| 111 | +<ul> |
| 112 | +<li>"B"의 경우, 'B'가 어디에도 존재하지 않기 때문에 -1을 첫 번째 인덱스에 저장합니다. </li> |
| 113 | +<li>결과적으로 [-1]을 return 합니다. </li> |
| 114 | +</ul> |
| 115 | + |
| 116 | +<p>입출력 예 #3 </p> |
| 117 | + |
| 118 | +<ul> |
| 119 | +<li>"ASA"의 경우, </li> |
| 120 | +<li>1번 키 한 번 → A </li> |
| 121 | +<li>2번 키 두 번 → S </li> |
| 122 | +<li>1번 키 한 번 → A </li> |
| 123 | +<li>따라서 총합인 4를 첫 번째 인덱스에 저장합니다. </li> |
| 124 | +<li>"BGZ"의 경우, </li> |
| 125 | +<li>2번 키 한 번 → B </li> |
| 126 | +<li>1번 키 두 번 → G </li> |
| 127 | +<li>1번 키 세 번 → Z </li> |
| 128 | +<li>따라서 총합인 6을 두 번째 인덱스에 저장합니다. </li> |
| 129 | +<li>결과적으로 [4, 6]을 return 합니다.</li> |
| 130 | +</ul> |
| 131 | + |
| 132 | + |
| 133 | +> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges |
0 commit comments