๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm

[Algorithm/JAVA][ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜

๋ฐ˜์‘ํ˜•

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜

https://programmers.co.kr/learn/courses/30/lessons/42576

๋ฌธ์ œ์„ค๋ช…

์ˆ˜๋งŽ์€ ๋งˆ๋ผํ†ค ์„ ์ˆ˜๋“ค์ด ๋งˆ๋ผํ†ค์— ์ฐธ์—ฌํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋‹จ ํ•œ ๋ช…์˜ ์„ ์ˆ˜๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ชจ๋“  ์„ ์ˆ˜๊ฐ€ ๋งˆ๋ผํ†ค์„ ์™„์ฃผํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋งˆ๋ผํ†ค์— ์ฐธ์—ฌํ•œ ์„ ์ˆ˜๋“ค์˜ ์ด๋ฆ„์ด ๋‹ด๊ธด ๋ฐฐ์—ด participant์™€ ์™„์ฃผํ•œ ์„ ์ˆ˜๋“ค์˜ ์ด๋ฆ„์ด ๋‹ด๊ธด ๋ฐฐ์—ด completion์ด ์ฃผ์–ด์งˆ ๋•Œ, ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜์˜ ์ด๋ฆ„์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • ๋งˆ๋ผํ†ค ๊ฒฝ๊ธฐ์— ์ฐธ์—ฌํ•œ ์„ ์ˆ˜์˜ ์ˆ˜๋Š” 1๋ช… ์ด์ƒ 100,000๋ช… ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • completion์˜ ๊ธธ์ด๋Š” participant์˜ ๊ธธ์ด๋ณด๋‹ค 1 ์ž‘์Šต๋‹ˆ๋‹ค.
  • ์ฐธ๊ฐ€์ž์˜ ์ด๋ฆ„์€ 1๊ฐœ ์ด์ƒ 20๊ฐœ ์ดํ•˜์˜ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฐธ๊ฐ€์ž ์ค‘์—๋Š” ๋™๋ช…์ด์ธ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Code

import java.util.HashMap;
import java.util.Map;
class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer= "";
        HashMap<String,Integer> hm = new HashMap();
        for(String people : participant) hm.put(people,hm.getOrDefault(people,0)+1);
        for(String people : completion) hm.put(people,hm.get(people)-1);
        for(Map.Entry<String,Integer> tmp: hm.entrySet()){
            if(tmp.getValue() !=0){
                answer = tmp.getKey();
                return answer;
            }
        }
        return answer;
    }
}

Code ์„ค๋ช…

HashMap์„ ์ด์šฉํ•ด์„œ key๊ฐ€ ์‚ฌ๋žŒ์˜ ์ด๋ฆ„, value๊ฐ€ ์‚ฌ๋žŒ ์ˆ˜์ธ hm์„ ์„ ์–ธํ•ด์ค€๋‹ค.
๊ทธ๋ฆฌ๊ณ  participant๋ฅผ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ ค์„œ hm์— ๋„ฃ์–ด์ฃผ๋Š”๋ฐ ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๋ฉด ๊ทธ value์— 1์„ ๋”ํ•ด์ฃผ๊ณ  ์•„๋‹ˆ๋ผ๋ฉด 0์—๋‹ค๊ฐ€ 1์„ ๋”ํ•ด์ค€๋‹ค.
๋‹ค์Œ์œผ๋กœ completion์„ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ hm์— value๊ฐ’์„ 1์”ฉ ๋นผ์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฒฐ๊ณผ์ ์œผ๋กœ ํ•œ๋ช…๋งŒ value๊ฐ€ 1์ด๊ณ  ๋‚˜๋จธ์ง€๋Š” 0์ด๋œ๋‹ค.
hm์„ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด์„œ value๊ฐ€ 0์ธ๊ฐ’์„ ์ฐพ์•„์„œ returnํ•ด์ค€๋‹ค.

๋ฐฐ์šด์ 

์ด ๋ฌธ์ œ๋Š” ์ฒ˜์Œ์—๋Š” ๊ทธ๋ƒฅ String ๋ฐฐ์—ด์„ ์ด์šฉํ•ด์„œ sort๋ฅผ ํ•ด์ค€๋‹ค์Œ ํ•˜๋‚˜ํ•˜๋‚˜ ๋น„๊ตํ•ด์„œ ํ’€์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ๋ณด๊ณ 
String ๋ฐฐ์—ด์„ ์ด์šฉํ•œ ๋ฐฉ์‹์€ sort๋„ ๋‘๋ฒˆํ•˜๊ณ  ๋งˆ์ง€๋ง‰์— ํ•˜๋‚˜ํ•˜๋‚˜ ๋น„๊ตํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ๊นŒ์ง€ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค๋Š”๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ด๋ฒˆ HashMap์„ ์‚ฌ์šฉํ–ˆ๋‹ค.
HashMap์€ key,value๋ฅผ ๊ฐ€์ง„๊ตฌ์กฐ์ด๊ณ , key๋ฅผ ์ด์šฉํ•ด์„œ ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
์ด๋ฒˆ ๋ฌธ์ œ์—์„œ๋Š” HashMap<String, Integer> hm = new HashMap()์„ ์ด์šฉํ•ด์„œ ์„ ์–ธํ•ด์ฃผ๊ณ 
๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ hm.put(key, value)๋ฅผ ์ด์šฉํ•ด์„œ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

  1. ์—ฌ๊ธฐ์„œ hm.getOrDefalut๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋Š”๋ฐ get์€ key๊ฐ’์„ ์ด์šฉํ•ด์„œ ๊ฒ€์ƒ‰ํ•œ ๋‹ค์Œ value๋ฅผ ๋‹จ์ˆœํžˆ ๋ฆฌํ„ดํ•ด์ฃผ๋Š”๋ฐ ์ด ๋•Œ ํ•ด๋‹น key๊ฐ’์ด ์—†๋‹ค๋ฉด null์„ ๋ฆฌํ„ดํ•ด์ค€๋‹ค. ํ•˜์ง€๋งŒ getOrDefalut๋Š” key๊ฐ€ ์—†์„๋•Œ null์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ์ง€์•Š๊ณ , ๋‘๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ๋„˜๊ฒจ์ค€ default๊ฐ’์„ ๋ฆฌํ„ดํ•ด์ฃผ๊ฒŒ๋œ๋‹ค.
  2. ๊ทธ๋ฆฌ๊ณ  HashMap์„ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. Iterator๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹๋„ ์žˆ๊ณ  for๋ฌธ ๋ฐฉ์‹์ด ์žˆ๋Š”๋ฐ ์ต์ˆ™ํ•œ for๋ฌธ์„ ์‚ฌ์šฉํ–ˆ๋‹ค.(Iterator๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ณ  ์™œ ์“ฐ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.) ํ•ด์‹œ๋งต์—๋Š” entrySet()์ด๋ผ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ ์ด๋Š” key,value๋ฅผ ๊ฐ€์ง„ entrySet์„ ๋ฆฌํ„ดํ•ด์ค€๋‹ค. ๊ทธ๋ž˜์„œ Map.entry tmp๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ›์•„์ฃผ์—ˆ๋‹ค.
๋ฐ˜์‘ํ˜•