๐ฉ๐ป๐พ
[ํ๋ก๊ทธ๋๋จธ์ค/Java] ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ ๋ณธ๋ฌธ
[ํ๋ก๊ทธ๋๋จธ์ค/Java] ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ
์ฅฌ์ค์ด 2024. 1. 22. 23:13ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
2022 KAKAO BLIND RECRUITMENT์์ LV.1์ผ๋ก ์ถ์ ๋ ๋ฌธ์ ์ด๋ค.
2024 KAKAO WINTER INTERNSHIP ์ฝํ
๋ฅผ ๋ด๋ณธ 1์ธ์ผ๋ก์ ์นด์นด์ค๋ HashMap์ ํ์ฉํ๋ ๋ฌธ์ ๋ฅผ ์ข์ํ๋ ๋ฏ
HaspMap์์ ํ์ฉ๋๋ ๋ฉ์๋๋ค์ ์ ๋ฆฌํ๊ธฐ ์ข์ ๋ฌธ์ ์ธ ๊ฑฐ ๊ฐ์์ ์ฝ๋๋ธ๋ญ๋ณ๋ก ์์ธํ ์ค๋ช ์ ์ ์ด๋๋ ค๊ณ ํ๋ค:)
๐ฉ๐ป๐ป ์ ์ฒด ์ฝ๋๋ ์ฐ์ ์๋์ ๊ฐ๋ค.
import java.util.*;
class Solution {
public int[] solution(String[] id_list, String[] report, int k) {
int[] answer = new int[id_list.length];
HashSet<String> blockUser = new HashSet<>(); // ์ด์ฉ ๊ธ์ง ๋นํ ์ ์
Map<String, HashSet<String>> reportInfo = new HashMap<>(); // ์ ์ ๋ณ ์ ๊ณ ํ ์ ์ ๋ชจ์
Map<String, Integer> getReported = new HashMap<>(); // ์ ์ ๋ณ ์ ๊ณ ๋นํ ์
for (int i = 0; i < report.length; i++) {
String[] ppl = report[i].split(" ");
if (!reportInfo.containsKey(ppl[0]))
reportInfo.put(ppl[0], new HashSet<>());
reportInfo.get(ppl[0]).add(ppl[1]);
}
for (Map.Entry<String, HashSet<String>> map : reportInfo.entrySet()) {
// ๊ฐ ์ ๋๋ก ๋ค์ด๊ฐ๋์ง ํ์ธ
// System.out.println(map.getKey() + " : " + map.getValue());
for (String str : map.getValue()) {
getReported.put(str, getReported.getOrDefault(str, 0) + 1);
if (getReported.get(str) >= k)
blockUser.add(str);
}
}
for (int i = 0; i < id_list.length; i++) {
String name = id_list[i];
HashSet<String> values = reportInfo.get(name);
if (values != null) {
for (String str : blockUser) {
if (values.contains(str))
answer[i] += 1;
}
}
}
return answer;
}
}
๐ก ์ฝ๋๋ธ๋ญ ์ค๋ช
for (int i = 0; i < report.length; i++) {
String[] ppl = report[i].split(" ");
if (!reportInfo.containsKey(ppl[0]))
reportInfo.put(ppl[0], new HashSet<>());
reportInfo.get(ppl[0]).add(ppl[1]);
}
report ๋ฐฐ์ด์ ์ ์ฅ๋ ๊ฐ์ ๊ณต๋ฐฑ ๊ธฐ์ค์ผ๋ก ๋๋์ด์ HashMap ๊ฐ์ฒด์ธ reportInfo์ ์ ๊ณ ํ ์ ์ (=ppl[0])๋ฅผ key๊ฐ์ผ๋ก, ์ ๊ณ ๋นํ ์ ์ (=ppl[1])๋ฅผ value๊ฐ์ผ๋ก ์ถ๊ฐํด์ค๋ค.
์ด๋, ํ๋ฒ๋ ์ ์ฅ ์ ๋ ์ ์ ๋ผ๋ฉด reportInfo์ Map ๊ฐ์ฒด๋ฅผ ๋จผ์ ๋ง๋ค์ด์ค ๋ค value์ ๊ฐ์ ์ ์ฅํด์ค๋ค.
for (Map.Entry<String, HashSet<String>> map : reportInfo.entrySet()) {
// ๊ฐ ์ ๋๋ก ๋ค์ด๊ฐ๋์ง ํ์ธ
// System.out.println(map.getKey() + " : " + map.getValue());
for (String str : map.getValue()) {
getReported.put(str, getReported.getOrDefault(str, 0) + 1);
if (getReported.get(str) >= k)
blockUser.add(str);
}
}
Map.Entry๋ฅผ ์ฌ์ฉํ๋ฉด Map์ ์ ์ฅ๋ ๋ชจ๋ key-value์์ key-value๋ฅผ ๊ฐ๋ ํ๋์ ๊ฐ์ฒด๋ก ์ป์ ์ ์๋ค. -> Map์ ๊ฐ ํญ๋ชฉ์ ๊ตฌํ ์ ์๋ค.
๊ทธ๋์ Map์ ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ํ๋ฒ์ฉ ํ์ํ๋ฉด์ ํด๋น ๊ฐ์ฒด์ value์ ์ ์ฅ๋ ์ ๊ณ ๋นํ ์ ์ ์ ์ ๊ณ ๋นํ ํ์๋ฅผ ์ ๋ฐ์ดํธ ํด์ค๋ค.
Map.Entry ๋ฉ์๋
- getKey()
Map.Entry ๊ฐ์ฒด์ key๊ฐ์ ๋ฐํํ๋ค.
- getValue()
Map.Entry ๊ฐ์ฒด์ value๊ฐ์ ๋ฐํํ๋ค.
for (int i = 0; i < id_list.length; i++) {
String name = id_list[i];
HashSet<String> values = reportInfo.get(name);
if (values != null) {
for (String str : blockUser) {
if (values.contains(str))
answer[i] += 1;
}
}
}
์ด์ id_list์ ์ ์ฅ๋ ์์ด๋ ์์๋๋ก ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ์ผ์ ๋ฐ์ ํ์๋ฅผ answer ๋ฐฐ์ด์ ์ ์ฅ์ ํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ id_list์ ๋ด๊ธด ์์๋๋ก ํ์์ ์์ํ๋ค.
๋ณธ์ธ์ด ์ ๊ณ ํ ์ ์ ์ ์์ด๋๋ฅผ values์ ๋ด๊ณ , ๋๊ตฐ๊ฐ๋ฅผ ์ ๊ณ ํ ๊ธฐ๋ก์ด ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด ๋ณธ์ธ์ด ์ ๊ณ ํ ์์ด๋๊ฐ ์ ์ง๋ ์์ด๋์ ํฌํจ๋์ด ์๋์ง ํ์ธ์ ํด์ค๋ค.
๋ง์ฝ ํฌํจํ๋ ๊ฒฝ์ฐ, ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ์ผ์ ๋ฐ์ผ๋ฏ๋ก answer[i]์ ํด๋นํ๋ ๊ฐ์ 1 ์ฆ๊ฐ์์ผ์ค๋ค.
'์ฝ๋ฉํ ์คํธ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค/Java] ์ ๊ท ์์ด๋ ์ถ์ฒ (0) | 2024.01.23 |
---|---|
[PCCP ๋ชจ์๊ณ ์ฌ #1] 1๋ฒ - ์ธํจ์ด ์ํ๋ฒณ (0) | 2023.11.05 |
[ํ๋ก๊ทธ๋๋จธ์ค/Python] ์์ด๊ฐ ์ซ์ด์ (0) | 2023.03.21 |
[ํ๋ก๊ทธ๋๋จธ์ค/Python] ๋๋ฌธ์์ ์๋ฌธ์ (0) | 2023.03.21 |
[์ฝ๋ฉํ ์คํธ ๊ณ ๋์ Kit/Python] ํ(Heap) (0) | 2023.03.14 |