https://school.programmers.co.kr/learn/challenges?tab=algorithm_practice_kit
ํธ๋ ๋์ ์ฌ๊ณ ๊ณผ์ ๋ฐ ๊ฐ์ ์
์ฒ์์๋ ์ง์ง ๋ ๋ฐฐ์ด์ ์ ๋ ฌํด์ ๋น๊ตํ๋ฉด ๋๊ฒ ์ง๋ผ๊ณ ์๊ฐํ๋ค. ๊ทผ๋ฐ ์
๋ ฅ์ด 10๋ง์ด๋ผ ์๋ง ๊ทธ๋ ๊ฒ ํ์ผ๋ฉด ํจ์จ์ฑ ๊ฒ์ฌ์์ ๊ฑธ๋ฆฌ์ง์์์๊น..
๋๋ช
์ด์ธ์ด ์๋ ์ํ๋ผ Set์ ๋ชป์ฐ๊ณ , ๊ทธ๋์ Map์ ์ผ๋ค.
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
TreeMap<String, Integer> tm = new TreeMap();
for(String name: participant){
tm.put(name, tm.getOrDefault(name, 0)+1);
} // ํธ๋ฆฌ๋งต์ ์ ์ฅํด๋๊ธฐ -> ๊ตณ์ด TreeMap์ผ ํ์์์
// ์ด์ completion์ ๋๋ฉด์ ์ฒ๋ฆฌํ์
for(String name: completion){
tm.put(name, tm.get(name)-1);
} // 0์ด๋ฉด ์์ฃผํ๋ค๋ ์๋ฏธ๊ฐ ๋ ๊ฒ
Iterator<String> keys = tm.keySet().iterator();
while(keys.hasNext()){
String key = keys.next();
if(tm.get(key) != 0){
answer = key;
break;
}
}
return answer;
}
}
TreeMap์ ์ฐ๊ณ , key๋ฅผ ์ด๋ฆ, value๋ฅผ ์ธ์์๋ก ์ค์ ํ๋ค. ์ ๋ ฌ์ด ํ์์๊ธฐ๋๋ฌธ์ HashMap์ ์ฐ๋ ๊ฒ ํจ์จ์ ์ด์ง๋ง ๊ทธ๋ฅ ์๋ จ์ ์ํด TreeMap์ ์ ํํ๋ค.
์ด๊ธฐํํ ๋ getOrDefault๋ฅผ ์ด ์ด์ ๋ value๊ฐ ์์ ๋ null ๋ฐํํ๋ ๊ฑธ ๋ง๊ธฐ ์ํจ์ด๋ค.
๊ทธ๋ ๊ฒ ๋ค ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ๋์, ์ธ์์๊ฐ 1์ธ key๋ฅผ ์ฐพ์์ผ ํ๋ ๊ฒ ๋ฌธ์ ์๋ค. ์ ์ฝ๋์ฒ๋ผ keySet์ ์ฌ์ฉํด๋ ๋๋๋ฐ ์ด ๊ฒฝ์ฐ ์กฐํํด์ผ๋๋ ๊ฐ์ด ์์ฒญ ๋ง๋ค๋ฉด entrySet์ ๋นํด ์์ฒญ ๋๋ฆฌ๋ค๊ณ ํ๋ค.
๊ทธ๋ฆฌ๊ณ entrySet์ ์ฐ๋ฉด iterator๋ฅผ ์์จ๋ ๋๊ธฐ ๋๋ฌธ์ ์๋์ฒ๋ผ ํด๋ณด๋ ๊ฑด ์ด๋จ๊น
import java.util.*;
class Solution {
public String solution(String[] participant, String[] completion) {
String answer = "";
TreeMap<String, Integer> tm = new TreeMap();
for(String name: participant){
tm.put(name, tm.getOrDefault(name, 0)+1);
} // ํธ๋ฆฌ๋งต์ ์ ์ฅํด๋๊ธฐ -> ๊ตณ์ด TreeMap์ผ ํ์์์
// ์ด์ completion์ ๋๋ฉด์ ์ฒ๋ฆฌํ์
for(String name: completion){
tm.put(name, tm.get(name)-1);
} // 0์ด๋ฉด ์์ฃผํ๋ค๋ ์๋ฏธ๊ฐ ๋ ๊ฒ
for(Map.Entry<String, Integer> item : tm.entrySet()){
if(item.getValue() != 0){
answer = item.getKey();
break;
}
}
return answer;
}
}
# ์ถ๊ฐ ๊ณต๋ถ
TreeMap ์์๋ณด๊ธฐ
// entrySet()์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ํญ๋ชฉ ์ํ
for (Map.Entry<String, Integer> entry : tm.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + ": " + value);
}
// ํน์ ์กฐ๊ฑด์ ๋ง๋ ํญ๋ชฉ ์ฐพ๊ธฐ
for (Map.Entry<String, Integer> entry : tm.entrySet()) {
if (entry.getValue() > 2) {
System.out.println(entry.getKey());
}
}
// ๋งต ์์ ํ๊ธฐ
for (Map.Entry<String, Integer> entry : tm.entrySet()) {
entry.setValue(entry.getValue() * 2);
}
Tree ์๋ฆฌ์ฆ ๋ต๊ฒ ๋ ๋๋ธ๋ํธ๋ฆฌ๋ก ๊ตฌํ๋์ด์๊ณ , SortedMap์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ค. ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ ์ํ(๊ธฐ๋ณธ์ ์ค๋ฆ์ฐจ์)์ด๋ฉฐ entrySet์ ์ฌ์ฉํ๋ฉด ๋งต์ ๋ชจ๋ key-value ์์ `Set<Map.Entry<K,V>>` ํํ๋ก ๋ฐํํ๋ค.
set์ด add, remove์๋ค๋ฉด map์ put, get, remove(key๋ก ์ญ์ , entrySet์์ ์ญ์ , key-value๋ก ์ญ์ )๊ฐ ์๋ค.
์ญ์ ๋ง ์ข ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
// 1. ํค๋ฅผ ์ฌ์ฉํ ์ญ์
tm.remove("Apple");
// 2. ํค์ ๊ฐ์ ๋ชจ๋ ์ฌ์ฉํ ์ญ์
tm.remove("Banana", 2);
์ ๊ธฐํ ๊ฑด removeIf๊ฐ ์๋๋ฐ ์๋์ฒ๋ผ ์ฌ์ฉํ๋ค. ๋๋ค์์ ์ฐ๋๊ฑด๋ฐ ๊ทธ๋ฅ ์ด๋ฐ๊ฒ ์๋ค ์ ๋๋ง ๊ธฐ์ตํ๊ณ ๋์ด๊ฐ์ผ ๋ ๊ฒ ๊ฐ๋ค.
// ์ง์๋ง ์ ๊ฑฐํ๊ธฐ
tm.entrySet().removeIf(entry -> entry.getValue() % 2 == 0);
putIfAbsent๋ ์์ด์ ์ด๊ฑธ ํ์ฉํ๋ฉด value์ Collection๋ ๋ฃ์ ์ ์๋ค.
tm.putIfAbsent("A", 1);
๊ธฐ์กด์ put์ด ๋ฌด์กฐ๊ฑด ํค๋ฅผ ๋ฎ์ด์ผ๋ค๋ฉด putIfAbsent๋ ํค๊ฐ ์์ ๋๋ง ๋์ํ๋ค. ๊ทธ๋์ Collection๊ฐ์ ๊ฑธ new๋ก ๋ฃ์ด์ค ๋ ์ฐ๋ฉด ๋๊ฒ ๋ค.
๋์์ด ๋๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๋ฒํผ ํ ๋ฒ์ฉ ๋๋ฅด๊ณ ๊ฐ์ฃผ์ธ์!
'OJ๐ผ > Programmers ๊ณ ๋์ ํท' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LV.2][JAVA] ์ฌ๋ฐ๋ฅธ ๊ดํธ (0) | 2024.08.28 |
---|---|
[LV.3][JAVA] ๋ฒ ์คํธ ์จ๋ฒ (0) | 2024.08.27 |
[LV.2][JAVA] ๋ ๋งต๊ฒ (0) | 2024.08.27 |
[LV.2][JAVA] ์ ํ๋ฒํธ ๋ชฉ๋ก (0) | 2024.08.25 |
[LV.1][JAVA] ํฐ์ผ๋ชฌ(feat. TreeSet ์์๋ณด๊ธฐ) (0) | 2024.08.25 |