๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Programmers lv-1

์™„์ฃผํ•˜์ง€ ๋ชปํ•œ ์„ ์ˆ˜ - Java [์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต]

by ๊ทคํ”ผํ‚ค 2022. 12. 23.

 

โค๏ธ Problem

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

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

 

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

 

  • ์ž…์ถœ๋ ฅ ์˜ˆ & ์„ค๋ช…
no participant completion return
1 ["leo", "kiki", "eden"] ["eden", "kiki"] "leo"
2 ["marina", "josipa", "nikola", "vinko", "filipa"] ["josipa", "filipa", "marina", "nikola"] "vinko"
3 ["mislav", "stanko", "mislav", "ana"] ["stanko", "ana", "mislav"] "mislav"
  1. "leo"๋Š” ์ฐธ์—ฌ์ž ๋ช…๋‹จ์—๋Š” ์žˆ์ง€๋งŒ, ์™„์ฃผ์ž ๋ช…๋‹จ์—๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์— ์™„์ฃผํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. "vinko"๋Š” ์ฐธ์—ฌ์ž ๋ช…๋‹จ์—๋Š” ์žˆ์ง€๋งŒ, ์™„์ฃผ์ž ๋ช…๋‹จ์—๋Š” ์—†๊ธฐ ๋•Œ๋ฌธ์— ์™„์ฃผํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
  3. "mislav"๋Š” ์ฐธ์—ฌ์ž ๋ช…๋‹จ์—๋Š” ๋‘ ๋ช…์ด ์žˆ์ง€๋งŒ, ์™„์ฃผ์ž ๋ช…๋‹จ์—๋Š” ํ•œ ๋ช…๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๋ช…์€ ์™„์ฃผํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ’› Solution

ํ’€์ด 1

import java.util.Arrays;
class Solution {
    public String solution(String[] participant, String[] completion) {
        Arrays.sort(participant);
        Arrays.sort(completion);

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

 

์ฒ˜๋ฆฌ์†๋„ GOOD๐Ÿ˜‹


 


 

ํ’€์ด 2

import java.util.Arrays;
class Solution {
    public String solution(String[] participant, String[] completion) {
        Arrays.sort(participant);
        Arrays.sort(completion);
        for (int i=0; i<completion.length; i++){
            if (!participant[i].equals(completion[i])){
                return participant[i];
            }
        }
        return participant[participant.length-1];
    }
}

 

์ฒ˜๋ฆฌ์†๋„ GOOD๐Ÿ˜‹


 

๐Ÿ’œ Comment

์ฒ˜์Œ์—๋Š” ์ด์ค‘ for ๋ฐ˜๋ณต๋ฌธ๊ณผ for ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์งฐ๋Š”๋ฐ, ์ •ํ™•์„ฑ ํ…Œ์ŠคํŠธ๋Š” ํ†ต๊ณผํ–ˆ์ง€๋งŒ ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ์—์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

import java.util.Arrays;
class Solution {
    public String solution(String[] participant, String[] completion) {
        Arrays.sort(participant);
        Arrays.sort(completion);

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

 

์ด์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด ๋‚ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ArrayList์™€ HashMap๋„ ์จ๋ดค๋Š”๋ฐ ์—ญ์‹œ๋‚˜ ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ fail...๐Ÿ˜ฅ ๋‚ด๊ฐ€ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์—, ์ตœ๋Œ€ํ•œ ๋ฐฐ์—ด ๊ทธ๋Œ€๋กœ๋ฅผ ๋ณด์กดํ•˜๋˜ ๋ฐ˜๋ณต๋ฌธ์„ ์ตœ์†Œํ•œ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ์•ˆํ–ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ํ’€์ด 1์—์„œ๋Š” ๋จผ์ € Arrays.sort()๋ฅผ ์‚ฌ์šฉํ•ด์„œ participant[]์™€ completion[]๋ฅผ ์ •๋ ฌํ•œ ๋’ค for ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ๋™์ผํ•œ ์ธ๋ฑ์Šค(i)๋ฅผ ๊ฐ€์งˆ ๋•Œ ๊ฐ๊ฐ์˜ ๊ฐ’์ด ๋™์ผํ•˜์ง€ ์•Š์œผ๋ฉด String answer์— participant[i]๋ฅผ ๊ฐ’์„ ์ €์žฅํ•˜๋„๋ก ํ•˜์˜€๋‹ค. ์ด ๋•Œ, for ๋ฐ˜๋ณต๋ฌธ์˜ ๊ธธ์ด๋Š” participant.length๋ณด๋‹ค ์ž‘๋‹ค๊ณ  ์„ค์ •ํ–ˆ๋‹ค. ์ง€๊ธˆ ๋ณด๋‹ˆ completion.length๋ฅผ for ๋ฐ˜๋ณต๋ฌธ์˜ ๊ธธ์ด๋กœ ์žก์•„๋„ ๋ฌด๋ฐฉํ•  ๊ฒƒ ๊ฐ™๋‹ค. ์–ด์จŒ๋“ , ๋ฌธ์ œ์— ๋”ฐ๋ฅด๋ฉด completion.length๋Š” ํ•ญ์ƒ participant.length๋ณด๋‹ค 1์”ฉ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— i๊ฐ€ completion.length-1๋ณด๋‹ค ์ž‘์œผ๋ฉด String answer์— participant[i+1]๋ฅผ ๋„ฃ๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, participant[i+1]์€ participant[participant.length-1]๊ณผ ๋™์ผํ•˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰, participant ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ๊ฐ’์ด answer์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. 

 

ํ’€์ด 2๋Š” ํ’€์ด 1์˜ ๋ณ€ํ˜•๋ฒ„์ „์ธ๋ฐ ์ฒ˜๋ฆฌ ์†๋„์— ์œ ์˜๋ฏธํ•œ ๋ณ€ํ™”๊ฐ€ ์žˆ์ง€๋Š” ์•Š๋‹ค. ํ•˜์ง€๋งŒ for ๋ฐ˜๋ณต๋ฌธ ์•ˆ์— ๋‘๊ฐœ์˜ if๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ฝ”๋“œ ํ•ด์„์ด ๋” ์šฉ์ดํ•  ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. for๋ฌธ์ด ๋‹ค ๋Œ๊ณ  ๋‚˜์„œ๋„ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ๋Š” participant[] ๋ฐฐ์—ด์˜ ๋งจ ๋งˆ์ง€๋ง‰ ๊ฐ’์ด ์™„์ฃผ๋ฅผ ๋ชปํ•œ ๊ฒฝ์šฐ๋ฐ–์—” ์—†๋‹ค. ์ด๋ ‡๊ฒŒ break;๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  return์„ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ๋‘ ๋ฐฐ์—ด์˜ ๋™์ผํ•œ ์ธ๋ฑ์Šค ๊ฐ’์ด ๊ฐ™์ง€ ์•Š์„ ๋•Œ ์ฆ‰์‹œ participant[i] ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋˜๊ณ , for ๋ฐ˜๋ณต๋ฌธ์ด ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ participant[]์˜ ๋งจ ๋งˆ์ง€๋ง‰ ๋ฐฐ์—ด ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•˜๋ฏ€๋กœ ์ฝ”๋“œ ์ดํ•ด๋ฅผ ์ข€ ๋” ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

 

8529์œ„

๋Œ“๊ธ€