๊ธฐ๋ก๋ฐฉ

Lv.2 : ํ• ์ธ ํ–‰์‚ฌ ๋ณธ๋ฌธ

CodingTest/Java

Lv.2 : ํ• ์ธ ํ–‰์‚ฌ

Soom_1n 2023. 10. 1. 22:30

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ์›ํ•˜๋Š” ๋ฌผํ’ˆ๊ณผ ๊ทธ ๊ฐœ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
  • ๊ฐ ๋‚ ์งœ ๋ณ„ ํ• ์ธ ๋ฌผํ’ˆ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. 10์ผ ์ด๋‚ด์— ์›ํ•˜๋Š” ๋ฌผํ’ˆ์„ ๊ฐ ๊ฐœ์ˆ˜ ์ด์ƒ ์‚ด ์ˆ˜ ์žˆ๋Š” ๊ตฌ๊ฐ„์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿ”ธ ๋ฌธ์ œ ํ’€์ด ๐Ÿ”ธ

  • ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ๋ฐฉ์‹์œผ๋กœ 10ํฌ๊ธฐ์˜ ์œˆ๋„์šฐ๋ฅผ ์ด๋™ํ•˜๋ฉฐ ๋ฌผํ’ˆ ๊ฐœ์ˆ˜๋ฅผ ์ฒดํฌํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.util.Map;
import java.util.HashMap;

class Solution {
    public int solution(String[] want, int[] number, String[] discount) {
        
        // ์ž…๋ ฅ ๋ฌธ์ž์—ด hash๋กœ ์ €์žฅ
        int answer = 0;
        int[] cnt = new int[want.length];
        Map<String, Integer> map = new HashMap<>();
        
        for(int i = 0; i < want.length; i++) {
            map.put(want[i], i);
        }
                        
        // ํˆฌ ํฌ์ธํ„ฐ ์ดˆ๊ธฐํ™”
        int start = 0;
        int end = 9;
        
        for(int i = 0; i < 10; i++) {
            if(map.containsKey(discount[i])) {
                cnt[map.get(discount[i])]++;
            }
        }
        
        // ์กฐ๊ฑด์— ๋งž๋Š”์ง€ ๊ฒ€์‚ฌ
        if(cntCheck(number, cnt)) answer++;
        
        // ํˆฌ ํฌ์ธํ„ฐ ๊ฒ€์‚ฌ
        while(end < discount.length - 1) {
            // ๋‹ค์Œ ์นธ ์ง„ํ–‰
            String ss = discount[start];
            if(map.containsKey(ss) && cnt[map.get(ss)] > 0)
                cnt[map.get(ss)]--;
            
            start++;
            end++;
            
            String es = discount[end];
            if(map.containsKey(es))
                cnt[map.get(es)]++;
            
            // ์กฐ๊ฑด์— ๋งž๋Š”์ง€ ๊ฒ€์‚ฌ
            if(cntCheck(number, cnt)) answer++;
        }
        
        return answer;
    }
    
    private boolean cntCheck(int[] number, int[] cnt) {
        for(int i = 0; i < number.length; i++) {
            if(cnt[i] < number[i]) {
                return false;
            }
        }
        return true;
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ๋ฌผํ’ˆ์€ 10๊ฐœ์ง€๋งŒ ๋น ๋ฅธ ์ธ๋ฑ์Šค ์ฐพ๊ธฐ๋ฅผ ์œ„ํ•ด HashMap์— ๋ฌผํ’ˆ๋ช…๊ณผ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ–ˆ๋‹ค.
  • ์œˆ๋„์šฐ๋Š” intํ˜• ๋ฐฐ์—ด cnt๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค.
  • ์กฐ๊ฑด์— ๋งž๋Š”์ง€ ํ™•์ธ์€ cntCheck() ๋ฉ”์„œ๋“œ๋กœ ๋”ฐ๋กœ ๋นผ์„œ ์ง„ํ–‰ํ–ˆ๋‹ค.
  • ์œˆ๋„์šฐ๊ฐ€ ์ด๋™ํ•˜๋ฉด์„œ ๋น ์ ธ๋‚˜๊ฐ„ ์ธ๋ฑ์Šค์˜ ๋ฌผํ’ˆ์€ -1, ๋“ค์–ด์˜จ ์ธ๋ฑ์Šค์˜ ๋ฌผํ’ˆ์€ +1 ํ•ด์ค€ ๋’ค ์กฐ๊ฑด์— ๋งž๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค.
    • ์กฐ๊ฑด์— ๋งž์œผ๋ฉด answer๋ฅผ +1 ํ•œ๋‹ค.
  • answer๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ๋กœ ์ดํ•ดํ–ˆ์œผ๋ฉด ๋” ๋น ๋ฅด๊ฒŒ ํ’€์ดํ–ˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ, ํˆฌํฌ์ธํŠธ๋กœ ์ดํ•ดํ•ด์„œ ํ’€์ดํ•˜๋‹ค๊ฐ€ ํฌ๊ธฐ๊ฐ€ 10์œผ๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค๋Š”๊ฑธ ๋’ค๋Šฆ๊ฒŒ ํŒŒ์•…ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค.
  • ๋‹ค๋ฅธ ํ’€์ด๋ฅผ ๋ณด๋‹ˆ, cnt ๊ฐ™์€ ์œˆ๋„์šฐ ๋ฐฐ์—ด์„ ๋”ฐ๋กœ ๋‘๋Š”๊ฒŒ ์•„๋‹Œ, hashmap์— ์ธ๋ฑ์Šค ๋Œ€์‹ ํ•ด์„œ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์˜ ํ’€์ด๊ฐ€ ๋” ํšจ์œจ์ ์ธ ๊ฒƒ ๊ฐ™๋‹ค.

728x90