π λ¬Έμ λ°λ‘κ°κΈ°
https://school.programmers.co.kr/learn/courses/30/lessons/160586
νλ‘κ·Έλλ¨Έμ€
SWκ°λ°μλ₯Ό μν νκ°, κ΅μ‘μ Total Solutionμ μ 곡νλ κ°λ°μ μ±μ₯μ μν λ² μ΄μ€μΊ ν
programmers.co.kr
π λ¬Έμ μμ½

π λ¬Έμ μν©
μλ ν΄λν° μνμ ν ν€μ μ¬λ¬ λ¬Έμκ° ν λΉλμ΄ μμλ κ²κ³Ό λΉμ·ν μν©μ΄λ€.
μλ₯Ό λ€μ΄ 1λ² ν€μ "A", "B", "C" μμΌλ‘ λ€μ΄ μλ€λ©΄,
1λ² ν€λ₯Ό ν λ² λλ₯΄λ©΄ A, λ λ² λλ₯΄λ©΄ B, μΈ λ² λλ₯΄λ©΄ C μ΄λ° μμΌλ‘ λμνλ€.
κ·Έλ°λ° μ΄ λ¬Έμ μ μνμ μλ ν΄λν° λ³΄λ€ ν¨μ¬ μμ λΆλ°©(?)νλ€.
- ν€μ κ°μλ 1~100κ° μ¬μ΄μ΄κ³
- κ° ν€μ μ΄λ€ λ¬Έμκ° λ€μ΄κ°μ§λ 무μμλ€.
- κ²λ€κ° μ€λ³΅λ νμ©ν΄μ, κ°μ λ¬Έμκ° μ¬λ¬ ν€μ μκ±°λ, ν ν€μ μ¬λ¬ λ² μμ μλ μλ€.
- μ¬μ§μ΄ μ΄λ€ λ¬Έμλ μμ μμ μλ μλ€. (μ λ ₯ λΆκ°λ₯)
π― λͺ©ν
μ°λ¦¬μ λͺ©νλ μ£Όμ΄μ§ μν(keyamp)μ μ΄μ©ν΄μ νκ² λ¬Έμμ΄(targets)μ μμ±ν λ
μ΅μ λͺ λ² ν€λ₯Ό λλ¬μΌ νλμ§λ₯Ό ꡬνλ κ²μ΄λ€.
(λ§μ½ λ§λ€ μ μλ λ¬Έμμ΄μ΄λΌλ©΄ -1μ λ°ννλ©΄ λλ€.)
π μμ
keymap = ["ABACD", "BCEFD"]
targets = ["ABCD"]
μμ κ°μ μμκ° μ£Όμ΄μ‘μ λ, "ABCD"λ₯Ό μ λ ₯νλ μν©μ μμ보μ.
νΈμμ "ABACD"λ₯Ό 1λ² ν€λ§΅, "BCEFD"λ₯Ό 2λ² ν€λ§΅μ΄λΌκ³ λΆλ₯΄κΈ°λ‘ νμ.
- 1λ² ν€λ§΅μ Aκ° μ‘΄μ¬νλλ°, ν€λ₯Ό 1λ² λλ¬μ Aλ₯Ό λ§λ€ μλ μκ³ , 3λ² λλ¬μ Aλ₯Ό λ§λ€ μλ μλ€.
- μ΅μ νμλ 1λ² λλ¬μ Aλ₯Ό λ§λλ κ²μ΄λ―λ‘, 1λ² ν€λ§΅μ 1ν λλ₯Έλ€.
- Bλ 1λ² ν€λ§΅κ³Ό 2λ² ν€λ§΅μ λͺ¨λ μ‘΄μ¬νλ€.
- κ·Έλ¬λ 1λ² ν€λ§΅μμλ 2ν λλ¬μΌ νμ§λ§, 2λ² ν€λ§΅μμλ 1νλ§ λλ₯΄λ©΄ λλ€.
- λ°λΌμ 2λ² ν€λ§΅μ 1ν λλ¬μ Bλ₯Ό λ§λ λ€.
- Cλ 1λ² ν€λ§΅κ³Ό 2λ² ν€λ§΅μ λͺ¨λ μ‘΄μ¬νλλ°, 2λ² ν€λ§΅μ΄ λλ₯΄λ νμκ° λ μ λ€.
- λ°λΌμ 2λ² ν€λ§΅μ 2ν λλ¬μ Cλ₯Ό λ§λ λ€.
- Dλ 1λ² ν€λ§΅κ³Ό 2λ² ν€λ§΅μ λͺ¨λ μ‘΄μ¬νλλ°, λ λ€ 5ν λλ¬μΌ Dλ₯Ό μ λ ₯ν μ μλ€.
- λ°λΌμ μ무거λ 5ν λλ¬μ Dλ₯Ό λ§λ λ€.
ππ» μ¦, "ABCD"λ₯Ό λ§λ€κΈ° μν΄μλ ν€λ₯Ό μ΅μ 1 + 1 + 2 + 5 = 9ν λλ¬μΌ νλ€.
π‘ μμ΄λμ΄
π§ ν΅μ¬ μ λ΅
1οΈβ£ μ μ²λ¦¬λ₯Ό μν λ§΅ λ§λ€κΈ°
Map<Character, Integer> map = new HashMap<>();
for (String key : keymap) {
for (int i = 0; i < key.length(); i++) {
char c = key.charAt(i);
int press = i + 1; // iλ 0-based, λλ₯Έ νμλ 1λΆν° μΉ΄μ΄νΈ νλ―λ‘ +1 ν΄μ£ΌκΈ°
// κΈ°μ‘΄ κ°κ³Ό μ ν보 μ€μμ λ μμ κ°μ μ μ₯νκΈ°
map.put(c, Math.min(map.getOrDefault(c, Integer.MAX_VALUE), press));
}
}
κ°μ λ¬Έμκ° μ¬λ¬ ν€ & μ¬λ¬ μμΉμ μμ΄λ κ°μ₯ μμ λλ¦ νμλ§ μ μ₯νκΈ° μν΄μ μμ κ°μ΄ μ€κ³νμλ€.
2οΈβ£ νκ²λ³ ν©μ°νκΈ°
for (int i = 0; i < targets.length; i++) {
String t = targets[i];
int sum = 0; // μ΄ νκ²μ μ΄ λλ¦ μ ν©κ³
boolean ok = true; // λ§λ€ μ μλμ§ μ¬λΆ (μ€κ°μ λΆκ°λ₯νλ©΄ falseλ‘ λ°κΏμ£ΌκΈ°)
for (int j = 0; j < t.length(); j++) { // νκ²μ λ¬Έμλ₯Ό μΌμͺ½λΆν° νλμ© μ΄ν΄λ³΄κΈ°
char c = t.charAt(j); // νμ¬ λ¬Έμ
Integer p = map.get(c); // mapμμ μ΅μ λλ¦ μ μ°ΎκΈ°
// μ΄λ€ ν€μλ μμ → λΆκ°λ₯
if (p == null) {
ok = false;
break;
}
sum += p;
}
answer[i] = ok ? sum : -1; // λ§λ€ μ μμΌλ©΄ ν©κ³λ₯Ό, μμΌλ©΄ -1μ μ μ₯
}
- sum: νμ¬ νκ² νλμ λν ν©κ³λ‘, λ§€ νκ²λ§λ€ 0μΌλ‘ μ΄κΈ°νν΄μ€μΌ νλ€.
- ok: μ΄ νκ²μ λ§λ€ μ μλκ°λ₯Ό νμνλ νλκ·Έμ΄λ€.
νλλΌλ λ§λ€ μ μλ λ¬Έμκ° λμ€λ©΄, λ°λ‘ falseλ‘ λ°κΏμ€μΌ νλ€. - answer[ ]: iλ²μ§Έ νκ²μ κ²°κ³Όλ₯Ό λ£μ΄μ€λ€.
π©π»π» μ΅μ’ μ½λ
import java.util.*;
class Solution {
public int[] solution(String[] keymap, String[] targets) {
int answer[] = new int[targets.length];
Map<Character, Integer> map = new HashMap();
for(String key : keymap){
for(int i = 0; i < key.length(); i++){
char c = key.charAt(i);
int press = i + 1;
map.put(c, Math.min(map.getOrDefault(c, Integer.MAX_VALUE), press));
}
}
for(int i = 0; i < targets.length; i++){
String t = targets[i];
int sum = 0;
boolean ok = true;
for(int j = 0; j < t.length(); j++){
char c = t.charAt(j);
Integer p = map.get(c);
if(p == null){
ok = false;
break;
}
sum+= p;
}
answer[i] = ok ? sum : -1;
}
return answer;
}
}
π μκ° λ³΅μ‘λ
1οΈβ£ μ μ²λ¦¬ κ³Όμ
for (String key : keymap) {
for (int i = 0; i < key.length(); i++) {
...
}
}
λͺ¨λ λ¬Έμλ€μ μ νν ν λ²μ© μ€μΊν΄μΌ νλ―λ‘ μκ° λ³΅μ‘λλ O(N)μ΄λ€.
(μ΄λ, Nμ λͺ¨λ ν€λ§΅μ μλ κ° λ¬Έμμ΄ κΈΈμ΄μ ν©μ΄λ€.)
2οΈβ£ νκ²λ³ ν©μ°
for (int i = 0; i < targets.length; i++) {
for (int j = 0; j < t.length(); j++) {
...
}
}
κ° νκ²μ λͺ¨λ λ¬Έμλ₯Ό ν λ²μ© μ‘°νν΄μΌ νλ―λ‘ μκ° λ³΅μ‘λλ O(M)μ΄λ€.
(μ΄λ, Mμ νκ²μ μλ κ° λ¬Έμμ΄ κΈΈμ΄μ ν©μ΄λ€.)
ππ» λ°λΌμ μ΅μ’ μκ° λ³΅μ‘λλ O(N + M)μ΄λ€.
'π» μ½ν > π JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [νλ‘κ·Έλλ¨Έμ€/JAVA] μΉ΄λ λμΉ (3) | 2025.08.14 |
|---|---|
| [νλ‘κ·Έλλ¨Έμ€/JAVA] λ§μΉ νκΈ° (4) | 2025.08.13 |
| [νλ‘κ·Έλλ¨Έμ€/JAVA] μΆμ΅ μ μ (5) | 2025.08.11 |
| [νλ‘κ·Έλλ¨Έμ€/JAVA] λ¬λ¦¬κΈ° κ²½μ£Ό (6) | 2025.08.10 |
| [νλ‘κ·Έλλ¨Έμ€/JAVA] λ°μ΄ν° λΆμ (5) | 2025.08.09 |