Skip to content

Commit 06f120d

Browse files
committed
[level 1] Title: 대충 만든 자판, Time: 1.57 ms, Memory: 9.29 MB -BaekjoonHub
1 parent 82ef0a7 commit 06f120d

File tree

2 files changed

+151
-0
lines changed

2 files changed

+151
-0
lines changed
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
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
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
def solution(keymap, targets):
2+
keys_dict = {}
3+
for key in keymap:
4+
for k in range(len(key)):
5+
if key[k] not in keys_dict.keys():
6+
keys_dict[key[k]] = k + 1
7+
else:
8+
if (k+1) < keys_dict[key[k]]:
9+
keys_dict[key[k]] = k + 1
10+
ans = [0 for _ in range(len(targets))]
11+
for i in range(len(targets)):
12+
for c in targets[i]:
13+
if c in keys_dict.keys():
14+
ans[i] += keys_dict[c]
15+
else:
16+
ans[i] = -1
17+
break
18+
return ans

0 commit comments

Comments
 (0)