๐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ
https://school.programmers.co.kr/learn/courses/30/lessons/176963
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก์ Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๐ ๋ฌธ์ ์์ฝ

๐ผ๏ธ ์ถ์ต ์ ์ ๊ณ์ฐํ๊ธฐ
- ๊ท์น
- ์ฌ์ง ์ ์ธ๋ฌผ์ ์ด๋ฆ์ ํ์ธํ๋ค.
- ํด๋น ์ธ๋ฌผ์ด name[ ]์ ์์ผ๋ฉด → yearning[ ]์์ ์ ์๋ฅผ ๊ฐ์ ธ์จ๋ค.
- ์ ์๋ฅผ ๋ชจ๋ ๋ํ ๊ฐ์ด ๊ทธ ์ฌ์ง์ ์ถ์ต ์ ์์ด๋ค.
- ์ด๋ฅผ ๋ชจ๋ ์ฌ์ง์ ๋ํด ๋ฐ๋ณตํด์ ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ๋ฐํํด์ผ ํ๋ค.
๐ ์ ๋ ฅ
- name[ ] → ๊ทธ๋ฆฌ์ํ๋ ์ฌ๋ ์ด๋ฆ ๋ชฉ๋ก
- yearingp[ ] → ๊ฐ ์ฌ๋์ ๊ทธ๋ฆฌ์ ์ ์
- photo[ ][ ] → ์ฌ์ง ์ ์ธ๋ฌผ๋ค์ ์ด๋ฆ ๋ชฉ๋ก
์๋ฅผ ๋ค๋ฉด ์๋์ ๊ฐ๋ค.
name: ["may", "kein", "kain", "radi"]
yearning:[5, 10, 1, 3]
photo: [
["may", "kein", "kain", "radi"], // 5+10+1+3 = 19
["may", "kein", "brin", "deny"], // 5+10 = 15
["kon", "kain", "may", "coni"] // 1+5 = 6
]
๊ฒฐ๊ณผ: [19, 15, 6]
๐ก ์์ด๋์ด
1๏ธโฃ์ด๋ฆ → ์ ์ ๋งคํ ์์ฑ
์ฌ์ง์ ์ํํ ๋ ์ด๋ฆ์ ์ ์๋ฅผ O(1)์ ์กฐํํ๊ธฐ ์ํด
name[i]์ yearning[i]๋ฅผ ๋งค์นญํ์ฌ Map<String, Integer>์ ์ ์ฅํด์ค๋ค.
Map<String, Integer> map = new HashMap<>();
for(int i = 0; i < name.length; i++){
map.put(name[i], yearning[i]);
}
2๏ธโฃ ์ฌ์ง๋ณ ํฉ๊ณ ๊ณ์ฐํ๊ธฐ
- photo์ ๊ฐ ํ(= ํ ์ฅ์ ์ฌ์ง)์ ์ํํ๋ค.
- ์ด ๊ณผ์ ์์ ์ฌ์ง ์ ์ธ๋ฌผ ์ด๋ฆ๋ค์ ํ๋์ฉ ๊ฐ์ ธ์์ ๋งต์์ ์ ์ ์กฐํ ํ ํฉ์ฐํ๋ค.
- ๋ง์ฝ ์ด๋ฆ์ด ๋งต์ ์๋ค๋ฉด, getOrDefault(person, 0)์ผ๋ก 0์ ์ฒ๋ฆฌํ๋ค.
- ๊ณ์ฐ๋ ํฉ๊ณ๋ฅผ answer[i]์ ์ ์ฅํ๋ค.
for(int i= 0; i < photo.length; i++){
int sum = 0;
for(int j = 0; j < photo[i].length; j++){
String person = photo[i][j];
sum += map.getOrDefault(person, 0);
}
answer[i] = sum;
}
๋๋ 3๋ฒ์งธ ๋ถ๋ถ์์ ์๊ฐ์ ์ก์ ๋จน์๋ค (ลฬฅฬฅฬฅฬฅ ษลฬฅฬฅฬฅฬฅ)
์ฌ์ง์ ์๋ ์ธ๋ฌผ์ด ๋งต์ ์์ ์๋ ์๋ค๋ ์ ์ ์๊ฐ ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค ..ใ ใ
์ ํต๊ณผ๊ฐ ์ ๋๋ ๊ฑฐ์ง ํ๋ฉฐ ํ์ฐธ์ ๊ณ ๋ฏผํ์๋๋ฐ,
์ด ๊ธ์ ๋ณด๋ ๋ถ๋ค์ ๋ฌธ์ ๋ฅผ ๊ผผ๊ผผํ ์ฝ๊ณ ํ๊ธฐ๋ฅผ ,,สโโ แขโธ ฬซ โธแขโษ
๐ฉ๐ป๐ป ์ต์ข ์ฝ๋
import java.util.HashMap;
import java.util.Map;
class Solution {
public int[] solution(String[] name, int[] yearning, String[][] photo) {
int[] answer = new int[photo.length];
Map<String, Integer> map = new HashMap<>();
for(int i = 0; i < name.length; i++){
map.put(name[i], yearning[i]);
}
for(int i= 0; i < photo.length; i++){
int sum = 0;
for(int j = 0; j < photo[i].length; j++){
String person = photo[i][j];
sum += map.getOrDefault(person, 0);
}
answer[i] = sum;
}
return answer;
}
}
๐ ์๊ฐ ๋ณต์ก๋
1๏ธโฃ ์ด๋ฆ → ์ ์ ๋งคํ
for (int i = 0; i < name.length; i++) {
map.put(name[i], yearning[i]);
}
name ๋ฐฐ์ด์ ํ ๋ฒ ์ํํ๋ฉฐ ํด์๋งต์ ์ ์ฅํ๋ ๋ถ๋ถ์ ์๊ฐ ๋ณต์ก๋๋ O(N)์ด๋ค.
(์ฌ๊ธฐ์ N์ ์ฌ๋ ์์ด๊ณ , ์ฐธ๊ณ ๋ก ํ๊ท ์ ์ผ๋ก put์ O(1)์ด๋ผ๊ณ ํ๋ค.)
2๏ธโฃ ์ฌ์ง๋ณ ํฉ์ฐ
for (int i = 0; i < photo.length; i++) {
int sum = 0;
for (int j = 0; j < photo[i].length; j++) {
String person = photo[i][j];
sum += map.getOrDefault(person, 0);
}
answer[i] = sum;
}
๋ชจ๋ ์ฌ์ง์ ์ด๋ฆ์ ํ ๋ฒ์ฉ ์กฐํํ๋๋ฐ, ๊ฐ ์กฐํ๋ ํ๊ท O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๋ํ, ๋ฐ๋ณต๋ฌธ 2๊ฐ๊ฐ ์๋ฏธํ๋ ๊ฒ์ ๋ชจ๋ ์ฌ์ง์ ๋ฑ์ฅํ๋ ์ด๋ฆ๋ค์ ์ด ํฉ์ด๋ฏ๋ก,
์ฌ์ง ์ ์ด๋ฆ์ ์ด ํฉ์ P๋ผ๊ณ ๋์ ๋ ์๊ฐ ๋ณต์ก๋๋ O(P)์ด๋ค.
(P = Σ photo[i].length ๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.)
๐๐ป ๋ฐ๋ผ์ ์ต์ข ์๊ฐ ๋ณต์ก๋๋ O(N + P)์ด๋ค.
(์ด๋ N์ name ๋ฐฐ์ด์ ์๋ ์ฌ๋ ์์ด๊ณ , P๋ ๋ชจ๋ ์ฌ์ง์์ ์ด๋ฆ์ ์ดํฉ์ด๋ค.)
'๐ป ์ฝํ > ๐ JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๋์ถฉ ๋ง๋ ์ํ (3) | 2025.08.14 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๋ง์น ํ๊ธฐ (4) | 2025.08.13 |
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๋ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ (6) | 2025.08.10 |
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ๋ฐ์ดํฐ ๋ถ์ (5) | 2025.08.09 |
| [ํ๋ก๊ทธ๋๋จธ์ค/JAVA] ์ด์ํ ์นธ (4) | 2025.08.04 |