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

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ์Šคํ‚ฌํŠธ๋ฆฌ

giraffe_ 2023. 8. 17. 22:16

https://school.programmers.co.kr/learn/courses/30/lessons/49993

 

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

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

programmers.co.kr

 

 

 

 

 

 

๋ฌธ์ œ

  • ์„ ํ–‰ ์Šคํ‚ฌ ์ˆœ์„œ skill๊ณผ ์œ ์ €๋“ค์ด ๋งŒ๋“  ์Šคํ‚ฌํŠธ๋ฆฌ๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด skill_trees๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ
  • ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌํŠธ๋ฆฌ ๊ฐœ์ˆ˜๋ฅผ return

 

์ œํ•œ์‚ฌํ•ญ

  • ์„ ํ–‰ ์Šคํ‚ฌ ์ˆœ์„œ skill์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 26 ์ดํ•˜
  • skill_trees๋Š” ๊ธธ์ด 1 ์ด์ƒ 20 ์ดํ•˜์ธ ๋ฐฐ์—ด
  • skill_trees์˜ ์›์†Œ๋Š” ๊ธธ์ด๊ฐ€ 2 ์ด์ƒ 26 ์ดํ•˜์ธ ๋ฌธ์ž์—ด

 

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

skill skill_trees return
"CBD" {"BACDE", "CBADF", "AECB", "BDA"} 2

 

 

 

 

 

ํ’€์ด

  • ์Šคํ‚ฌํŠธ๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ์ง€ ์„ ํ–‰ ์Šคํ‚ฌ ์ˆœ์„œ์— ๋งž๋Š”์ง€ ํŒ๋‹จํ•˜๊ธฐ
    • skill์— ์žˆ๋Š” ๋ฌธ์ž์™€ ์ผ์น˜ํ•œ๋‹ค๋ฉด, ๊ทธ ์Šคํ‚ฌ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅ
    • ๋‹ค์Œ์— ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ž๊ฐ€ ์ €์žฅํ•œ ์ธ๋ฑ์Šค๋ณด๋‹ค ์ž‘์œผ๋ฉด(์„ ํ–‰ ์Šคํ‚ฌ ์ˆœ์„œ์— ๋งž์ง€ ์•Š์Œ) => ๋ถˆ๊ฐ€๋Šฅ
    • ์ €์žฅํ•œ ์ธ๋ฑ์Šค๋ณด๋‹ค ํฌ๋ฉด(์ˆœ์„œ์— ๋งž์Œ) => ์Šคํ‚ฌ ์ˆœ์„œ ์ฆ๊ฐ

 

 

 

 

 

์ฝ”๋“œ

import java.util.*;

class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = 0; //์ •๋‹ต : ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌํŠธ๋ฆฌ ๊ฐœ์ˆ˜
        
        for(int i = 0; i < skill_trees.length; i++) {
            if(isPossible(skill, skill_trees[i])) { //์Šคํ‚ฌํŠธ๋ฆฌ ๊ฐ€๋Šฅํ•œ์ง€
                answer++;
            }
        }
        
        return answer;
    }
    
    public boolean isPossible(String skill, String skill_tree) {
        int order = 0; //์Šคํ‚ฌ์˜ ์ˆœ์„œ ์ €์žฅ
        
        for(int i = 0; i < skill_tree.length(); i++) {
            int idx = skill.indexOf(skill_tree.charAt(i)); //ํ•ด๋‹น ์Šคํ‚ฌ์˜ ์ˆœ์„œ ๊ฐ€์ ธ์˜ด
            
            if(idx == -1) continue;
            
            if(order < idx) { //์„ ํ–‰๋˜์ง€ ์•Š์œผ๋ฉด
                return false; //๋ถˆ๊ฐ€๋Šฅ
            } else { //์„ ํ–‰๋˜์—ˆ์œผ๋ฉด
                order++; //์Šคํ‚ฌ ์ˆœ์„œ ์ฆ๊ฐ
            }      
        }
        
        return true;
    }
}

 

 

 

 

 

๊ฒฐ๊ณผ

 

 

 

 

 

๋ฐฐ์šด์ 

  • int indexOf(Object o)
    • ๋ฆฌ์ŠคํŠธ์— ์žˆ์œผ๋ฉด ํ•ด๋‹น ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜, ๋ฆฌ์ŠคํŠธ์— ์—†์œผ๋ฉด -1 ๋ฐ˜ํ™˜