Algorithm๐/ํ๋ก๊ทธ๋๋จธ์ค(Programmers)
[ํ๋ก๊ทธ๋๋จธ์ค / JAVA] ๋์ถฉ ๋ง๋ ์ํ
์ด์ ์์
2025. 7. 7. 20:20
๋ฌธ์ ๋งํฌ: https://school.programmers.co.kr/learn/courses/30/lessons/160586
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก์ Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
1. ๋ฌธ์ ํ์
- ์ฌ๋ฌ ๊ฐ์ ์ํ์ด ์๊ณ , ๊ฐ ์ํ์๋ ์ํ๋ฒณ์ด ์ฌ๋ฌ ๋ฒ ๋ฑ์ฅํจ.
- ์ํ์ ๊ฐ ์ํ๋ฒก์ด ๋ช ๋ฒ์งธ๋ก ๋๋ฌ์ผ ์ ๋ ฅ๋๋์ง ์ฃผ์ด์ง
- ์ํ์ ์๋ ๋ฌธ์๋ -1 ๋ฆฌํด.
- ์ฃผ์ด์ง ๋ฌธ์์ด targets ๋ฅผ ์ ๋ ฅํ ๋, ๊ฐ ๋ฌธ์๋ณ ์ต์ ๋ช ๋ฒ ํค๋ฅผ ๋๋ฌ์ผ ํ๋์ง ํฉ์ฐํด์ ๋ฆฌํดํ๋ ๋ฌธ์
2. ํ์ด ์๊ณ ๋ฆฌ์ฆ
1) ๊ฐ ์ํ๋ฒณ์ ์ต์ ํด๋ฆญ ํ์ ํ ์ด๋ธ ๋ง๋ค๊ธฐ (Preprocessing)
- keymap ์ ๊ฐ ๋ฌธ์์ด์ ํ์ํ์ฌ, ํด๋น ์ํ๋ฒณ์ด ๋ช ๋ฒ์งธ ์์น์ ์๋์ง ๋ชจ๋ ํ์ธํ๊ณ → ๊ฐ์ฅ ์์ ๊ฐ๋ง ์ ์ฅ.
→ ์๊ฐ ๋ณต์ก๋: O(M × L) (M = keymap ๋ฐฐ์ด ๊ธธ์ด, L = ๊ฐ ๋ฌธ์์ด ๊ธธ์ด)
2) ๊ฐ target ๋ฌธ์์ด์ ์ํํ๋ฉด์ ๋๋ฅด๋ ํ์ ๊ณ์ฐ
- ๊ฐ ๋ฌธ์์ด์ ๋ฌธ์ ํ๋์ฉ ๋ณด๋ฉด์ 1๋จ๊ณ์์ ๋ง๋ ํ ์ด๋ธ์์ ๋๋ฅด๋ ํ์ ๊ฐ์ ธ์ด
- ์๋ ๋ฌธ์๋ -1
→ ์๊ฐ๋ณต์ก๋: O(N × T) (N = target ๋ฐฐ์ด ๊ธธ์ด, T = ๊ฐ target ๋ฌธ์์ด ๊ธธ์ด)
3. ์ ๋ต ์ฝ๋
import java.util.*;
class Solution {
public int[] solution(String[] keymap, String[] targets) {
Map<Integer, Integer> alphaMap = new HashMap<>();
List<Integer> answer = new ArrayList<>();
int MAX_VALUE = 101;
for (int i = 0; i < 26; i++) {
alphaMap.put(i, 101);
}
for (String key : keymap){
for (int i = 0 ; i < key.length() ; i++){
char c = key.charAt(i);
int index = i + 1;
int int_char = (int) c - 'A';
if (alphaMap.get(int_char) > index){
alphaMap.put(int_char, index);
}
}
}
for (String target : targets){
int count = 0;
for (char c : target.toCharArray()){
int value = alphaMap.get((int) c - 'A');
if (value == 101){
count = -1;
break;
}
count += value;
}
answer.add(count);
}
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
4. ๋ง์น๋ฉฐ.
๊ฐ์ฅ ๋ง์ด ์ ๋จน์๋ ๋ถ๋ถ์ ๋ฌด์์ด์์๊น. List์ stream() method์ ์ฌ์ฉ๋ฒ์ ๋ํด์ ๋ด๊ฐ ๋น ๋ฅด๊ฒ ๋ ์ฌ๋ฆฌ์ง ๋ชปํ ๊ฒ ๊ฐ์๋ค. java ์ธ์ด์ ๋ํ ๊ณต๋ถ๋ฅผ ๋ ๋ง์ด ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ ๋ค.