[TIL] (230816) ๐Ÿ“Œ ์ค‘๋ณต๊ฐ’์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‘ ๋ฐฐ์—ด์„ ๋น„๊ตํ•˜์—ฌ ํฌํ•จ๋˜์ง€ ์•Š์€ ์š”์†Œ๋ฅผ ์ฐพ์•„๋‚ด์ž.-> ์†Œ๊ฑฐ๋ฒ• or HashMap ์ด์šฉํ•˜๊ธฐ.

Noh Jihyeonยท2023๋…„ 8์›” 16์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
3/49
post-thumbnail

์˜ค๋Š˜๋„ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ์„ ํ™œ์šฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์•˜๋‹ค.
์ด์ œ๋Š” ๋‹จ์ˆœํžˆ ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ์˜ ์‚ฌ์šฉ๋ฒ•๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋Š˜ ์‚ฌ์šฉํ•˜๋˜ ํ˜•ํƒœ๋“ค( int [], String [], ArrayList <> )์ด ์•„๋‹Œ ๋‹ค์–‘ํ•œ ๋ณ€์ˆ˜๋“ค์˜ ํ˜•ํƒœ์™€ ํŠน์ง•์„ ์•Œ์•„๋ณด๊ณ  ์ ์žฌ์ ์†Œ์— ํ™œ์šฉํ•˜๋Š” ๋ฌธ์ œํ’€์ด๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค.




๐Ÿ”ธ๋ฌธ์ œ ๋ฐœ์ƒ

๋ฌธ์ œ๋งํฌ: https://school.programmers.co.kr/learn/courses/30/lessons/42576

- ์กฐ๊ฑด
String[] participant: ๋งˆ๋ผํ†ค ๊ฒฝ๊ธฐ์— ์ฐธ์—ฌํ•œ ๋ชจ๋“  ์„ ์ˆ˜๋“ค์˜ ์ด๋ฆ„์ด ๋‹ด๊ธด ๋ฐฐ์—ด
String [] completion: ์™„์ฃผํ•œ ๋ชจ๋“  ์„ ์ˆ˜๋“ค์˜ ์ด๋ฆ„์ด ๋‹ด๊ธด ๋ฐฐ์—ด
์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜์˜ ์ด๋ฆ„์„ return ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด๋ผ

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



โœ… ์ฒ˜์Œ ๊ธฐ์žฌํ•œ ์ฝ”๋“œ ๐Ÿ‘‡



import java.util.List;
import java.util.Arrays;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        List<String> doneList = Arrays.asList(completion);
        
        for (String s: participant) {
            if (!doneList.contains(s)) {
                answer = s;
            }
        }
        // ์—ฌ๊ธฐ์— ์ค‘๋ณต๊ฐ’์„ ์ฒดํฌํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•จ
        
        return answer;
    }
}



โœ… ์‹คํ–‰ ๊ฒฐ๊ณผ ( ์ค‘๋ณต์ฒดํฌ๋ฅผ ๊ตฌํ˜„ ๋ชปํ•ด์„œ ๋ถ€๋ถ„์‹คํŒจ ์˜ˆ์ƒํ–ˆ์Œ)


completion์— contains()์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์–ด์„œ Arrays.asList()๋กœ ๋ณ€ํ™˜ํ–ˆ๋‹ค.

for๋ฌธ์„ ๋Œ๋ฆฌ๋ฉด์„œ ํฌํ•จ๋˜์ง€ ์•Š์€๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ  ์‹ค์ œ๋กœ ์ค‘๋ณต๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์›ํ•˜๋Š” ๊ฐ’์ด ๋‚˜์™”๋‹ค.

๋‹ค๋งŒ ํ…Œ์ŠคํŠธ 3๋ฒˆ์ฒ˜๋Ÿผ ์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์‚ฌ๋žŒ๊ณผ ์™„์ฃผํ•œ ์‚ฌ๋žŒ์ด ๋™๋ช…์ด์ธ์ผ ๋•Œ๋Š” ์›ํ•˜๋Š” ๋Œ€๋กœ ์ฒดํฌ๋˜์ง€ ์•Š์•„์„œ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ดค๋‹ค.






๐Ÿ”ธ์‹œ๋„ํ•ด ๋ณธ ๊ฒƒ


``` 1. ๊ฐ ๋ฐฐ์—ด์—์„œ ๊ฐ’์˜ ํฌํ•จ์—ฌ๋ถ€๋ฅผ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํ™•์ธ ํ›„ ์—†๋Š” ๊ฐ’๋งŒ ์ €์žฅํ•œ๋‹ค. 2. ๋™๋ช…์ด์ธ(์ค‘๋ณต๊ฐ’)์ธ๋ฐ ํ•œ๋ช…์€ ์™„์ฃผ๋ฅผ ํ•ด์„œ 1๊ณผ ๊ฐ™์ด ์ฒดํฌํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ณ„๋„๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๋ฐฉํ–ฅ์€ ํฌ๊ฒŒ ๋‘๊ฐ€์ง€์˜€๋‹ค. ```
์—ฌ๊ธฐ์„œ 2๋ฒˆ์ด ๋ฌธ์ œ์˜€๋Š”๋ฐ "์–ด๋–ค ์‹์œผ๋กœ ์ค‘๋ณต์š”์†Œ๋ผ๋Š” ๊ฑธ ์•Œ์•„๋ณด๊ณ  ์ฒ˜๋ฆฌํ•  ๊ฑด๊ฐ€?" ์ด ๋ถ€๋ถ„์„ booleanํ˜•ํƒœ์˜ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•ด ๋ดค๋‹ค.

1. boolean Key ์„ ์–ธ

๐Ÿ‘‡ ์ฝ”๋“œ ๐Ÿ‘‡

  boolean key = false;
        if(answer.length() == 0) {
            for(String s: participant) {
                if(doneList.contains(s)) {
                    key = !key;
                }
            }
        }

์˜๋„: key์˜ ๊ธฐ๋ณธ๊ฐ’์„ false๋กœ ์„ ์–ธ ํ›„ participant์™€ completion๊ฐ’์ด ์ผ์น˜ํ•˜๋Š” ์ธ๋ฑ์Šค๋งŒ true๋กœ ๋ฐ”๊พผ๋‹ค.

์ด๋ฏธ if๋ฌธ์œผ๋กœ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 0์ธ ๊ฒฝ์šฐ๋งŒ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์กฐ๊ฑด ์ค‘๋ณต์ด ์žˆ๋‹ค๊ณ  ๋ณด๋ฉฐ, ์ด ์ค‘ ์ค‘๋ณต๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ ๋‹ค์‹œ false๋กœ ๋ฐ”๊พผ ํ›„ ๊ทธ ๊ฐ’๋งŒ ์ถ”์ถœํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ์งœ๋ฉด์„œ๋„ ๋Š๋‚€ ๋ฌธ์ œ์ 

  1. boolean๊ฐ’์„ ๊ธฐ์–ตํ•˜๋ ค๋ฉด ๊ฐ ์ธ๋ฑ์Šค๋งˆ๋‹ค boolean๊ฐ’์„ ๋”ฐ๋กœ ์ €์žฅํ•ด์•ผ ๋˜๋Š”๋ฐ ๊ทธ๋Ÿผ ๊ธฐ์กด์˜ participant๋ฐฐ์—ด์„ ์ด์ฐจ์› ๋ฐฐ์—ด๋กœ ๋ณต์‚ฌํ•˜๊ณ  ๋ณต์‚ฌํ•  ๋•Œ false๋กœ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

์‚ฌ์‹ค ์ด ๋ถ€๋ถ„์„ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์—๋„ if-for-if๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ด๋ฏธ ์ฝ”๋“œ์˜ ๋น„ํšจ์œจ์„ฑ์ด ๋ณด์ด๊ณ  ๋˜ ์ง€๊ธˆ ๋‚ด๊ฐ€ ์‹œ๋„ํ•˜๋ ค๋Š” ๋ฐฐ์—ด์˜ ๋ณต์‚ฌ ์—ญ์‹œ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์ด ์‹ค์ œ๋กœ ๊ตฌํ˜„๋˜๋Š” ๊ฑด ๋งž๋Š”์ง€ ๊ถ๊ธˆํ•ด์ ธ์„œ ๋‹ค๋ฅธ ๊ฑด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ  ๊ตฌํ˜„์—ฌ๋ถ€๋งŒ ํ™•์ธํ•ด ๋ดค๋‹ค.



โœ… ์ด์ฐจ์› ๋ฐฐ์—ด๋กœ ์„ค์ •ํ–ˆ์„ ๋•Œ ์ฝ”๋“œ๐Ÿ‘‡

 String[][] arr2 = new String[participant][2];
        List<String> doneList = Arrays.asList(completion);
        
        for(int i = 0; i < participant.length; i++) {
            arr2[i][0] = participant[i];
            arr2[i][1] = "0";
        }

        System.out.println(Arrays.deepToString(arr2));
        
        // ์ถœ๋ ฅ๊ฐ’ [[leo, 0], [kiki, 0], [eden, 0]]

์ƒ๊ฐํ•œ ๋Œ€๋กœ ์ด์ฐจ์› ๋ฐฐ์—ด ์„ค์ •์€ ํ–ˆ์œผ๋‚˜ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

participant []๊ฐ€ String ๋ฐฐ์—ด์ด๋ผ ์ด์ฐจ์› ๋ฐฐ์—ด๋„ String์œผ๋กœ ์„ค์ •ํ–ˆ๋Š”๋ฐ ๊ทธ๋Ÿผ ๋…ผ๋ฆฌ๊ฐ’์„ ๋„ฃ์„ ์ˆ˜๊ฐ€ ์—†๋‹ค.

๋‚ด๊ฐ€ ์›ํ•œ ๊ฑด ๋…ผ๋ฆฌ์˜ ๋ฐ˜์ „์ธ! ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด์„œ ์ค‘๋ณต์œผ๋กœ ์ฒดํฌ๋œ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์š”์†Œ๋“ค๊ณผ ๊ฐ’์ด ๋‹ค๋ฅด๊ฒŒ ๋‚˜์˜ค๋„๋ก ํ•˜๋Š” ๊ฑด๋ฐ ํŒ๋‹จ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’์ด ๋ฌธ์ž์—ด๋กœ ๋“ค์–ด๊ฐ„๋‹ค๋ฉด ์ด ๋ฐฉ์‹์€ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

์ค‘๋ณต์ฒดํฌ์— ํ•ด๋‹น๋˜๋Š” ๊ฐ’์ด ๋‚˜์˜ค๋ฉด arr [i][1]์„ true์ฒ˜๋Ÿผ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พธ๊ณ  ํ•ด๋‹น๋˜๋Š” ๋ชจ๋“  ๋ฌธ์ž๋ฅผ reverse()ํ• ๊นŒ?

๊ทผ๋ฐ ์ด๋ ‡๊ฒŒ ์ง„ํ–‰ํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์ง€๊ณ  ๋ณต์žก๋„๊ฐ€ ์ƒ๋‹นํ•ด์„œ ๋‹ค๋ฅธ ๋ฐฉ์‹์˜ ์ ‘๊ทผ์„ ์ƒ๊ฐํ•ด ๋ดค๋‹ค.



2. ๊ฐ™์€ ๊ฐ’์„ ์ฐพ์œผ๋ฉด ์†Œ๊ฑฐํ•˜๊ธฐ!




์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด ๋ณด๋‹ค๊ฐ€ ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ ํ›„ contains() ์ฆ‰, ํฌํ•จ์—ฌ๋ถ€๊ฐ€ ์•„๋‹Œ equals()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋Š”๋ฐ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฃผ์–ด์ง„ ๋ฐฐ์—ด ๋ง๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

๊ทธ๋Ÿผ 1๋ฒˆ์˜ ์ƒํ™ฉ๊ณผ ๋‹ค๋ฅผ ๊ฒŒ ์—†์–ด์„œ ์ง์ ‘ ์†์œผ๋กœ ๊ทธ๋ฆผ์„ ๊ทธ๋ ค๋ณด๋‹ค๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์„ ์•„์˜ˆ ์ง€์›Œ๋ฒ„๋ฆฌ๋Š” ์†Œ๊ฑฐ๋ฒ•์ด ์ƒ๊ฐ๋‚ฌ๋‹ค.

๊ตณ์ด ํ‚ค ๊ฐ’์„ ์„ค์ •ํ• ๊ฒŒ ์•„๋‹ˆ๋ผ ์™„์ฃผ์ž ๋ชฉ๋ก์—์„œ ์ฐธ๊ฐ€์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ๋ชฉ๋ก์—์„œ ์ง€์›Œ๋ฒ„๋ฆฌ๋ฉด ์–ด๋–จ๊นŒ?? ๊ทธ๋Ÿผ ๋™๋ช…์ด์ธ์ด๋ผ๋„ ๊ฐ’์ด ๋‚จ๊ฒŒ ๋œ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์˜ค๋Š” ๋ฐฐ์—ด participant์˜ ๋ฐ์ดํ„ฐ์˜ ๋ณด์กด์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ๋ฐฐ์—ด participantCopy๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ง„ํ–‰ํ•ด ๋ดค๋‹ค.


โœ… ์ค‘๋ณต๊ฐ’์„ ์ œ๊ฑฐํ–ˆ์„ ๋•Œ ์ฝ”๋“œ๐Ÿ‘‡


๊ฐ’์€ ์ •์ƒ, ๋Ÿฐํƒ€์ž„์€ ์ดˆ๊ณผ




๐Ÿ”ธํ•ด๊ฒฐ


์›ํ•˜๋Š” ๋Œ€๋กœ ์‹คํ–‰์€ ๋˜์—ˆ์œผ๋‚˜ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค๋Š” ๊ฑด ๋‚ด๊ฐ€ ์„ ํƒํ•œ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋Š” ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. for๋ฌธ์—์„œ ๊ฑธ๋ฆฐ ๊ฒƒ ๊ฐ™์€๋ฐ ์ด ์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ดค๊ณ  2๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

3. sort ์ •๋ ฌ ํ›„ ์ฒ˜์Œ์œผ๋กœ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฐ’ ์ฐพ๊ธฐ

์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์„ ๋จผ์ € ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ํ›„ ๊ฐ’์„ ์ˆœ์„œ๋Œ€๋กœ ๋น„๊ตํ•˜๋ฉด์„œ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.

์‚ฌ์‹ค ์ด ๋ฐฉ๋ฒ•๋„ ์ƒ๊ฐํ–ˆ์—ˆ์œผ๋‚˜ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์ด ๋‚˜์˜ค๋ฉด ๋’ท๋ถ€๋ถ„๋ถ€ํ„ฐ ์ˆœ์„œ๊ฐ€ ๋‹ค ๋ฐ€๋ฆฌ์ง€ ์•Š๋‚˜?๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ๋ฐฐ์ œ์‹œ์ผฐ๋˜ ๋ฐฉ๋ฒ•์ด์—ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋‚˜์™€์„œ ์ง์ ‘ ๊ทธ๋ ค๋ดค๋‹ค.


โœ… ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ ํ›„ ๊ฐ’์„ ๋น„๊ตํ–ˆ์„ ๋•Œ ์ฝ”๋“œ ๐Ÿ‘‡


import java.util.Arrays;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";

        Arrays.sort(participant);
        Arrays.sort(completion);

        for(int i=0;i<completion.length; i++) {
             if(!completion[i].equals(participant[i])){
                answer = participant[i];
                 break;
             }
        }
        if("".equals(answer)) {
            answer = participant[participant.length -1];
        }

        return answer;
    }
}


์—ญ์‹œ ์• ๋งคํ•  ๋• ์ง์ ‘ ๊ทธ๋ ค๋ณด๋Š” ๊ฒŒ ํ™•์‹คํ•˜๋‹ค.

์กฐ๊ฑด๋ฌธ์˜ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์‹œ์ ์ด ๋ฐ”๋กœ cpmpletion์— ์—†๋Š” ๊ฐ’์ด ๋˜๊ณ , ์›๋ณธ์˜ ํ›ผ์†๋„ ์—†์„๋ฟ๋”๋Ÿฌ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋„ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋‹จ, ๋ถˆ์ผ์น˜ ๊ฐ’์ด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ผ๋ฉด ์ฒ˜์Œ ์„ค์ •ํ•œ ""์œผ๋กœ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— if์กฐ๊ฑด์— ์›๋ž˜ ๋ฐฐ์—ด์ธ participant []์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์ง„ํ–‰ํ•˜๋ฉด ๋Ÿฐํƒ€์ž„๋„ ํ†ต๊ณผ๊ฐ€ ๋œ๋‹ค!



4. HashMap ์ด์šฉํ•˜๊ธฐ


โœ… HashMap ์ฝ”๋“œ ๐Ÿ‘‡


import java.util.HashMap;

class Solution {
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        HashMap<String, Integer> hm = new HashMap<>();
        for (String player : participant) hm.put(player, hm.getOrDefault(player, 0) + 1);
        for (String player : completion) hm.put(player, hm.get(player) - 1);

        for (String key : hm.keySet()) {
            if (hm.get(key) != 0){
                answer = key;
            }
        }
        return answer;
    }
}

๋‚ด๊ฐ€ ์• ๋จน์—ˆ๋˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ํ‚ค, ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„์ด HashMap์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

participant ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ์ด๋ฆ„์„ key๋กœ ์‚ฌ์šฉํ•˜๋Š”๋ฐ value๋””ํดํŠธ๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์ดˆ๊ธฐ์— ๋Œ€์‘๋˜๋Š” key-value๋ฅผ (player, 1)๋กœ ์„ค์ •ํ•˜๊ณ  ๋‹ค์Œ for๋ฌธ์—์„œ key-value๋ฅผ -1์”ฉ ์ง„ํ–‰ํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์ด ํŒ๋ณ„ํ•˜๊ฒŒ ๋œ๋‹ค.

1) ๋™๋ช…์ด์ธ์ด ์—†์„ ๋•Œ

value : 1 (๋‹ค์Œ for๋ฌธ์—์„œ ๋งค์นญ๋˜๋Š” key๊ฐ’์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— -1์„ ๋ชปํ–ˆ์Œ)

2) ๋™๋ช…์ด์ธ์ด ์žˆ์„ ๋•Œ

value: 1(์ฒ˜์Œ for๋ฌธ์—์„œ getOrDefault(player, 0) + 1๋กœ ์ธํ•ด ์ด 2๋ผ๋Š” ๊ฐ’์„ ๊ฐ€์ง, ์ดํ›„ -1์ด ์ง„ํ–‰๋จ)

์ด๋ ‡๊ฒŒ key-value๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค




๐Ÿ”ธ์•Œ๊ฒŒ ๋œ ์ 

์ฒ˜์Œ ์ด์ฐจ์› ๋ฐฐ์—ด์„ ์„ ์–ธ ํ›„ ์›ํ•˜๋Š” ๋Œ€๋กœ ๊ฐ’์ด ๋“ค์–ด๊ฐ”๋Š”์ง€ ํ™•์ธ์ฐจ toString()์„ ํ–ˆ๋Š”๋ฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

์ผ์ฐจ์› ์ด์ƒ์˜ ๋‹ค์ฐจ์› ๋ฐฐ์—ด์—์„œ๋Š” toString()์ด ์•„๋‹ˆ๋ผ deepToString()๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ๋‹ค.

๋‘ ๋ฐฐ์—ด์ด ์žˆ๊ณ  ๋”ฑ ํ•œ ๊ฐ€์ง€ ๊ฐ’๋งŒ ๋‹ค๋ฅด๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ชจ๋‘ ๋™์ผํ•˜๋‹ค๋ฉด ์ •๋ ฌ์„ ํ†ตํ•ด ์—†๋Š” ๊ฐ’์„ ์ฐพ์„ ์ˆ˜๋„ ์žˆ๋‹ค.

ํฌํ•จ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” contains()๋Š” ์ค‘๋ณต์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜์ง€ ์•Š๊ณ  ํ™•์ธํ•  ๊ฐ’์ด ํ™•์ธํ•ด์•ผ ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ชจ์Œ์— ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋งŒ ํŒ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ ๋ฌธ์ œ์—์„œ๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์•˜๋‹ค.

๋‹จ์ˆœํ•œ ๋ฐ˜๋ณต๋ฌธ์ด ์•„๋‹Œ ์ง€๊ธˆ์ฒ˜๋Ÿผ ์ฃผ์–ด์ง„ ๊ฐ’์˜ ์ฒดํฌ์—ฌ๋ถ€๊ฐ€ ํ•„์š”ํ•  ๊ฒฝ์šฐ key-value๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์กฐ๊ธˆ ๋” ํšจ์œจ์ ์ด๋‹ค.

๋‚˜๋Š” HashMap์˜ key๊ฐ’์ด ์ค‘๋ณต๋˜์ง€ ์•Š๊ณ  ๊ฐ™์€ ๊ฐ’์ผ ๊ฒฝ์šฐ ๋ฎ์–ด์“ฐ๊ธฐ๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ๋งŒ ์•Œ๊ณ  ์žˆ์–ด์„œ ์ค‘๋ณต๊ฐ’์˜ ๊ฒฝ์šฐ ๋‹จ์ˆœํžˆ ๋ฎ์–ด์“ฐ๊ธฐ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ์ค‘๋ณต๊ฐ’ ์ฒดํฌ๋Š” ๋ชปํ•˜์ง€ ์•Š์„๊นŒ ์‹ถ์—ˆ๋Š”๋ฐ


hm.put(player, hm.getOrDefault(player, 0) + 1);
hm.put(player, hm.get(player) - 1);

value๊ฐ’์— get์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋˜, ํ˜น์€ ๋””ํดํŠธ๊ฐ’์„ ๊ฐ€์ ธ์™€์„œ ์ง„ํ–‰ํ•˜๋ฉด key๊ฐ’์€ ๊ทธ๋Œ€๋กœ์ด๊ณ  ๊ธฐ์กด๊ฐ’์— ยฑ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

profile
๊ผญ๊ผญ ์”น์–ด์„œ ์†Œํ™”์‹œํ‚ค๋Š” ๋ง›์žˆ๋Š” ์ฝ”๋”ฉ

0๊ฐœ์˜ ๋Œ“๊ธ€