> ๋ฌธ์ ๋ณด๊ธฐ
๋ฌธ์ ์ค๋ช
์ ์ ์ฌ์ ๋ฌด์ง๋ ๊ฒ์ํ ๋ถ๋ ์ด์ฉ์๋ฅผ ์ ๊ณ ํ๊ณ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ์ผ๋ก ๋ฐ์กํ๋ ์์คํ ์ ๊ฐ๋ฐํ๋ ค ํฉ๋๋ค. ๋ฌด์ง๊ฐ ๊ฐ๋ฐํ๋ ค๋ ์์คํ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ฐ ์ ์ ๋ ํ ๋ฒ์ ํ ๋ช
์ ์ ์ ๋ฅผ ์ ๊ณ ํ ์ ์์ต๋๋ค.
- ์ ๊ณ ํ์์ ์ ํ์ ์์ต๋๋ค. ์๋ก ๋ค๋ฅธ ์ ์ ๋ฅผ ๊ณ์ํด์ ์ ๊ณ ํ ์ ์์ต๋๋ค.
- ํ ์ ์ ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ ๊ณ ํ ์๋ ์์ง๋ง, ๋์ผํ ์ ์ ์ ๋ํ ์ ๊ณ ํ์๋ 1ํ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
- k๋ฒ ์ด์ ์ ๊ณ ๋ ์ ์ ๋ ๊ฒ์ํ ์ด์ฉ์ด ์ ์ง๋๋ฉฐ, ํด๋น ์ ์ ๋ฅผ ์ ๊ณ ํ ๋ชจ๋ ์ ์ ์๊ฒ ์ ์ง ์ฌ์ค์ ๋ฉ์ผ๋ก ๋ฐ์กํฉ๋๋ค.
- ์ ์ ๊ฐ ์ ๊ณ ํ ๋ชจ๋ ๋ด์ฉ์ ์ทจํฉํ์ฌ ๋ง์ง๋ง์ ํ๊บผ๋ฒ์ ๊ฒ์ํ ์ด์ฉ ์ ์ง๋ฅผ ์ํค๋ฉด์ ์ ์ง ๋ฉ์ผ์ ๋ฐ์กํฉ๋๋ค.
๋ค์์ ์ ์ฒด ์ ์ ๋ชฉ๋ก์ด ["muzi", "frodo", "apeach", "neo"]์ด๊ณ , k = 2(์ฆ, 2๋ฒ ์ด์ ์ ๊ณ ๋นํ๋ฉด ์ด์ฉ ์ ์ง)์ธ ๊ฒฝ์ฐ์ ์์์ ๋๋ค.
์ ์ ID์ ์ ๊ฐ ์ ๊ณ ํ ID์ค๋ช
"muzi" | "frodo" | "muzi"๊ฐ "frodo"๋ฅผ ์ ๊ณ ํ์ต๋๋ค. |
"apeach" | "frodo" | "apeach"๊ฐ "frodo"๋ฅผ ์ ๊ณ ํ์ต๋๋ค. |
"frodo" | "neo" | "frodo"๊ฐ "neo"๋ฅผ ์ ๊ณ ํ์ต๋๋ค. |
"muzi" | "neo" | "muzi"๊ฐ "neo"๋ฅผ ์ ๊ณ ํ์ต๋๋ค. |
"apeach" | "muzi" | "apeach"๊ฐ "muzi"๋ฅผ ์ ๊ณ ํ์ต๋๋ค. |
๊ฐ ์ ์ ๋ณ๋ก ์ ๊ณ ๋นํ ํ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ์ ID์ ๊ณ ๋นํ ํ์
"muzi" | 1 |
"frodo" | 2 |
"apeach" | 0 |
"neo" | 2 |
์ ์์์์๋ 2๋ฒ ์ด์ ์ ๊ณ ๋นํ "frodo"์ "neo"์ ๊ฒ์ํ ์ด์ฉ์ด ์ ์ง๋ฉ๋๋ค. ์ด๋, ๊ฐ ์ ์ ๋ณ๋ก ์ ๊ณ ํ ์์ด๋์ ์ ์ง๋ ์์ด๋๋ฅผ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ์ ID์ ์ ๊ฐ ์ ๊ณ ํ ID์ ์ง๋ ID
"muzi" | ["frodo", "neo"] | ["frodo", "neo"] |
"frodo" | ["neo"] | ["neo"] |
"apeach" | ["muzi", "frodo"] | ["frodo"] |
"neo" | ์์ | ์์ |
๋ฐ๋ผ์ "muzi"๋ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ์ผ์ 2ํ, "frodo"์ "apeach"๋ ๊ฐ๊ฐ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ์ผ์ 1ํ ๋ฐ๊ฒ ๋ฉ๋๋ค.
์ด์ฉ์์ ID๊ฐ ๋ด๊ธด ๋ฌธ์์ด ๋ฐฐ์ด id_list, ๊ฐ ์ด์ฉ์๊ฐ ์ ๊ณ ํ ์ด์ฉ์์ ID ์ ๋ณด๊ฐ ๋ด๊ธด ๋ฌธ์์ด ๋ฐฐ์ด report, ์ ์ง ๊ธฐ์ค์ด ๋๋ ์ ๊ณ ํ์ k๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฐ ์ ์ ๋ณ๋ก ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ์ผ์ ๋ฐ์ ํ์๋ฅผ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- 2 ≤ id_list์ ๊ธธ์ด ≤ 1,000
- 1 ≤ id_list์ ์์ ๊ธธ์ด ≤ 10
- id_list์ ์์๋ ์ด์ฉ์์ id๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด์ด๋ฉฐ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- id_list์๋ ๊ฐ์ ์์ด๋๊ฐ ์ค๋ณตํด์ ๋ค์ด์์ง ์์ต๋๋ค.
- 1 ≤ report์ ๊ธธ์ด ≤ 200,000
- 3 ≤ report์ ์์ ๊ธธ์ด ≤ 21
- report์ ์์๋ "์ด์ฉ์id ์ ๊ณ ํid"ํํ์ ๋ฌธ์์ด์ ๋๋ค.
- ์๋ฅผ ๋ค์ด "muzi frodo"์ ๊ฒฝ์ฐ "muzi"๊ฐ "frodo"๋ฅผ ์ ๊ณ ํ๋ค๋ ์๋ฏธ์ ๋๋ค.
- id๋ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- ์ด์ฉ์id์ ์ ๊ณ ํid๋ ๊ณต๋ฐฑ(์คํ์ด์ค)ํ๋๋ก ๊ตฌ๋ถ๋์ด ์์ต๋๋ค.
- ์๊ธฐ ์์ ์ ์ ๊ณ ํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
- 1 ≤ k ≤ 200, k๋ ์์ฐ์์ ๋๋ค.
- return ํ๋ ๋ฐฐ์ด์ id_list์ ๋ด๊ธด id ์์๋๋ก ๊ฐ ์ ์ ๊ฐ ๋ฐ์ ๊ฒฐ๊ณผ ๋ฉ์ผ ์๋ฅผ ๋ด์ผ๋ฉด ๋ฉ๋๋ค.
์ ์ถ๋ ฅ ์
id_listreportkresult
["muzi", "frodo", "apeach", "neo"] | ["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"] | 2 | [2,1,1,0] |
["con", "ryan"] | ["ryan con", "ryan con", "ryan con", "ryan con"] | 3 | [0,0] |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
๋ฌธ์ ์ ์์์ ๊ฐ์ต๋๋ค.
์ ์ถ๋ ฅ ์ #2
"ryan"์ด "con"์ 4๋ฒ ์ ๊ณ ํ์ผ๋, ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ฐ๋ผ ํ ์ ์ ๊ฐ ๊ฐ์ ์ ์ ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ ๊ณ ํ ๊ฒฝ์ฐ๋ ์ ๊ณ ํ์ 1ํ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ๋ฐ๋ผ์ "con"์ 1ํ ์ ๊ณ ๋นํ์ต๋๋ค. 3๋ฒ ์ด์ ์ ๊ณ ๋นํ ์ด์ฉ์๋ ์์ผ๋ฉฐ, "con"๊ณผ "ryan"์ ๊ฒฐ๊ณผ ๋ฉ์ผ์ ๋ฐ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ [0, 0]์ return ํฉ๋๋ค.
์ ํ์๊ฐ ์๋ด
- ์ ํ์ฑ ํ ์คํธ : 10์ด
๐ฅ [๋ก์ง]
HashMap<String, ArrayList<String>> ์๋ฃ๊ตฌ์กฐ๋ฅผ ์์ฑํด key์๋ ์ ๊ณ ๋นํ ์ฌ๋์, value์๋ ์ ๊ณ ํ ์ฌ๋์ ๋ฆฌ์คํธ๋ฅผ ๋ด์๋ค.
์ด๋, ๊ฐ์ ์ ์ ์ ์ค๋ณต ์ ๊ณ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด
if(!reportGroup.get(tmp[1]).contains(tmp[0]))
์ด ์กฐ๊ฑด๋ฌธ์ ์ถ๊ฐํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํด๋ณด๋ ๊ตณ์ด ์ฌ๊ธฐ์ ์กฐ๊ฑด์ ๋ฌ์ง ์๊ณ idArray์ ์ธ ๋ถ๋ถ์์ stream์ผ๋ก
Arrays.stream(report).distinct().toArray(String[]::new);
์ด๋ฐ์์ผ๋ก ๋ฐ๊ฟ์ฃผ๋๊ฒ ๋ ํจ์จ์ ์ธ ์ฝ๋์์ ๊ฒ ๊ฐ๋ค.
์ด๋ ๊ฒ ๋ด๊ธด ์๋ฃ๊ตฌ์กฐ์์๋ value์ ๊ฐ์ด k๊ฐ ์ด์์ธ key๋ง ํ์ํ๊ธฐ ๋๋ฌธ์ for each๋ฌธ์ ์ด์ฉํด ํ์ํ ๊ฐ๋ค๋ง ์ป์ด์ค๊ฒ ๊ฑธ๋ฌ์ฃผ์๊ณ
value list๋ฅผ ๋๋ฉด์ ์ ๊ณ ํ ์ฌ๋์ index๊ฐ์ ์ฐพ์ ์ฆ๊ฐํ๋ค.
๐ฅ [์ต์ข ์ฝ๋]
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
List<String> idArray = Arrays.asList(id_list);
Map<String, ArrayList<String>> reportGroup= new HashMap<>();
for(int i = 0; i < report.length; i++) {
String[] tmp = report[i].split(" ");
if(reportGroup.get(tmp[1]) == null) {
reportGroup.put(tmp[1], new ArrayList<String>(Arrays.asList(tmp[0])));
} else {
if(!reportGroup.get(tmp[1]).contains(tmp[0]))
reportGroup.get(tmp[1]).add(tmp[0]);
}
}
reportGroup.forEach((key, value) -> {
if(value.size() >= k) {
for(String name : value) {
answer[idArray.indexOf(name)]++;
}
}
});
return answer;
}
}
๐ฅ [์๊ฐ]
1. ์ฝํ ๊ฐ ์ด๋ ๊ฒ ๋นก์ผ๊ฑด์ง ์ฒ์๋ถํฐ ๋๋ฌด ์ด๋ ค์ด ๋ฌธ์ ๋ฅผ ๊ณ ๋ฅธ๊ฑด์ง ใ ใ ์ง์ง ๋๋ฌผ๋๊ฒ ์ค๋๊ฑธ๋ ธ๋ค.
2. ์๊ฐ ์ด๊ณผ ๋ฉํธ๋ง ๋ค์ฏ๋ฒ ๋๊ฒ ๋ณด๋ฉด์ ์ฝ๋์ ํจ์จ์ฑ์ด ์ผ๋ง๋ ์ค์ํ์ง ๊นจ๋ซ๊ฒ ๋์๋ค.(์ฒ์์ผ๋ก ํด์๋งต ์จ๋ด)
3. ํด์๋งต์ ์ฌ์ฉ๋ฒ(์ ์, foreach๋ฌธ)์ ๋ค๋ฃฌ java language ํฌ์คํ ์ถ๊ฐํ๊ธฐ
์ฝํ ์ค๋น๋ฅผ ๋ณธ๊ฒฉ์ ์ผ๋ก ์์ํ์ง ์ผ๋ง ๋์ง ์์ ์ฝ๋์ ๋ฏธํกํ ์ ์ด ๋ง์ ์ ์์ต๋๋ค.
๋ถ์กฑํ ์ ํผ๋๋ฐฑ ์ฃผ์๋ฉด ์์ผ๋ก์ ํฌ์คํ ์ ๋ฐ์ํ๊ฒ ์ต๋๋ค! ๋ด์ฃผ์ ์ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค :)
-zelkova