-
[Algo Rhythm๐บ๐] ํ๋ก๊ทธ๋๋จธ์ค ๊ณ ๋์ Kit ์์ฃผํ์ง ๋ชปํ ์ ์Algo Rhythm๐บ๐/Programmers 2020. 6. 27. 14:59
๋ฌธ์ ์ค๋ช
์๋ง์ ๋ง๋ผํค ์ ์๋ค์ด ๋ง๋ผํค์ ์ฐธ์ฌํ์์ต๋๋ค. ๋จ ํ ๋ช ์ ์ ์๋ฅผ ์ ์ธํ๊ณ ๋ ๋ชจ๋ ์ ์๊ฐ ๋ง๋ผํค์ ์์ฃผํ์์ต๋๋ค.
๋ง๋ผํค์ ์ฐธ์ฌํ ์ ์๋ค์ ์ด๋ฆ์ด ๋ด๊ธด ๋ฐฐ์ด participant์ ์์ฃผํ ์ ์๋ค์ ์ด๋ฆ์ด ๋ด๊ธด ๋ฐฐ์ด completion์ด ์ฃผ์ด์ง ๋, ์์ฃผํ์ง ๋ชปํ ์ ์์ ์ด๋ฆ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- ๋ง๋ผํค ๊ฒฝ๊ธฐ์ ์ฐธ์ฌํ ์ ์์ ์๋ 1๋ช ์ด์ 100,000๋ช ์ดํ์ ๋๋ค.
- completion์ ๊ธธ์ด๋ participant์ ๊ธธ์ด๋ณด๋ค 1 ์์ต๋๋ค.
- ์ฐธ๊ฐ์์ ์ด๋ฆ์ 1๊ฐ ์ด์ 20๊ฐ ์ดํ์ ์ํ๋ฒณ ์๋ฌธ์๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- ์ฐธ๊ฐ์ ์ค์๋ ๋๋ช ์ด์ธ์ด ์์ ์ ์์ต๋๋ค.
๋๋ ์ด๋ป๊ฒ ํ์๋
import java.util.HashMap; import java.util.Iterator; class Solution { public String solution(String[] participant, String[] completion) { String answer; HashMap<String, Integer> runners = new HashMap<String, Integer>(); for(String name : participant) { if(runners.containsKey(name)) { int num = runners.get(name) + 1; runners.replace(name, num); } else { runners.put(name, 1); } } for(String name : completion) { int num = runners.get(name); if(num > 1) { runners.replace(name, num - 1);} if(num == 1) { runners.remove(name); } } answer = runners.keySet() .iterator() .next(); return answer; } }
๋๋ ์ ์ ๋ ๊ฒ ํ์๋
์ฒ์์๋ ์ง๊ด์ ์ผ๋ก brute force๋ฐฉ์์ ์๊ฐํ๋ค. ํ์ง๋ง ๋ง๋ผํค ๊ฒฝ๊ธฐ๋ฅผ ์ฐธ์ฌํ ์ ์์ ์๊ฐ 1๋ช ์ด์ 100,000๋ช ์ดํ์ด๊ธฐ ๋๋ฌธ์ time complexity๊ฐ O(n^2)์ธ brute force๋ ์ ํฉํ์ง ์๋ค๊ณ ์๊ฐํ๋ค. ๋ฌธ์ ์ ํ์ด ํด์์ด๊ธฐ๋ ํด๊ณ ๊ทธ๋์ ํด์๋งต์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
์ฒ์์๋ ์๋์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํ๋ค.
-
Participant ๋ฐฐ์ด์ ๊ฐ์ key๋ก ํ๊ณ index๊ฐ์ value๋ก ํด์ ํด์๋งต์ ์ ์ฅํ๋ค.
-
ํด์๋งต์ด Completion ๋ฐฐ์ด์ ๊ฐ์ key๋ก ๊ฐ์ง๊ณ ์๋์ง ํ์ธํ๊ณ ๊ฐ์ง๊ณ ์์ผ๋ฉด ํด๋น ๊ฐ์ ์ญ์ ํ๋ค.
-
ํด์๋งต์์ ๋จ์์๋ ์ด๋ฆ์ ํ์ธํ ํ return ํ๋ค.
ํ์ง๋ง ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฐธ๊ฐ์ ์ค ๋๋ช ์ด์ธ์ด ์๋ ๊ฒฝ์ฐ์๋ ์ ์ฉ๋์ง ์์๋ค. ์ด๋ฆ์ key๊ฐ์ ํ ๊ฒฝ์ฐ ์ด ์ด๋ฆ์ ๊ฐ์ง ์ฌ๋์ด ์ฌ๋ฌ ๋ช ์๋ค๋ ๊ฒ์ ๋ํ๋ผ ์ ์๋ ๋ฌด์ธ๊ฐ๊ฐ ํ์ํ๋ค. ์๊ฐํด๋ณด๋ ์ฒ์ ์๊ฐํ ์๊ณ ๋ฆฌ์ฆ์์๋ value๊ฐ ์๋ฌด ์๋ฏธ์์ด ๊ทธ๋ฅ ๋๊ณ ์์๋ค. ๊ทธ๋์ value๊ฐ์ผ๋ก ์ด ์ด๋ฆ์ ๊ฐ์ง ์ฌ๋์ ์๋ฅผ ๋ํ๋ด๊ธฐ๋ก ํ๋ค. ๊ทธ๋ ๊ฒ ์๋์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํ๋ค.
-
Participant ๋ฐฐ์ด์ ๊ฐ(=์ฐธ๊ฐ์ ์ด๋ฆ)์ key๋ก ํ๊ณ ๊ทธ ์ด๋ฆ์ ๊ฐ์ง ์ฌ๋์ ์๋ฅผ value๋ก ํด์ ํด์๋งต์ ์ ์ฅํ๋ค.
-
ํด์๋งต์ด completion ๋ฐฐ์ด์ ๊ฐ(=์์ฃผ์ ์ด๋ฆ)์ key๊ฐ์ผ๋ก ๊ฐ์ง๋ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ๋์ํ๋ค.
-
๊ทธ ์ด๋ฆ์ ๊ฐ์ง๊ณ ์๋ ์ฌ๋์ ์๊ฐ 1์ด๋ฉด ํด๋น Key๊ฐ์ ์ญ์ ํ๋ค.
-
๊ทธ ์ด๋ฆ์ ๊ฐ์ง๊ณต ์๋ ์ฌ๋์ ์๊ฐ 1๋ณด๋ค ํฌ๋ฉด value๊ฐ์ decrementํ์ฌ replaceํ๋ค.
-
-
ํด์๋งต์ traverseํด์ ์์ฃผํ์ง ๋ชปํ ์ ์๋ฅผ returnํ๋ค.
๋๋ ๋ฌด์์ ๋ฐฐ์ ๋
์ด๋ฆ์ ๊ฐ์ง ์ฌ๋์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ๋ฌด์ธ๊ฐ๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์๊ฐํ๊ธฐ๊น์ง ์๊ฐ์ด ๊ฝค ๊ฑธ๋ ธ๋ค.
์ด ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋ด ์๊ณ ๋ฆฌ์ฆ์ ํ๊ณ๋ฅผ ๋น ๋ฅด๊ฒ ํ์ ํ ์ ์๋ ๋ฅ๋ ฅ์ ๊ธธ๋ฌ์ผ๊ฒ ๋ค๋ ์๊ฐํ๋ค.
'Algo Rhythm๐บ๐ > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ