Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Algorithm] 스킬트리 #115

Closed
hwangJi-dev opened this issue Feb 22, 2023 · 0 comments
Closed

[Algorithm] 스킬트리 #115

hwangJi-dev opened this issue Feb 22, 2023 · 0 comments

Comments

@hwangJi-dev
Copy link
Owner

hwangJi-dev commented Feb 22, 2023

💬 문제

스킬트리


💬 Idea

<스택의 원리를 사용하자>

  1. 선수강되어야하는 skill 문자열을 배열형태로 바꾸어 stack을 만들어준다.
    1. skill: [”C”, “B”, “D”]
  2. 가장먼저 선수강되어야하는 skill을 pop하여 target에 저장한다.
    1. target: “C”
    2. skill: [”B”, “D”]
  3. 이후 skill_trees에 있는 각 스킬들을 돌면서
    1. currentSkill ≠ targetSkill (현재 수강하고자하는 스킬이 선수강되어야할 스킬이 아닌 경우)
      1. s가 skill에 포함된다면
        1. 선수강을 건너띄고 수강하는 경우이므로 허용될 수 없는 스킬트리이다. 따라서 available 변수의 값을 false로 바꾼 뒤 break로 반복문을 탈출한다.
      2. s가 skill에 포함되지 않는다면
        1. 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있기 때문에 아무런 조치를 취하지 않는다.
    2. currentSkill == targetSkill (현재 수강하고자하는 스킬이 선수강되어야할 스킬과 같은 경우)
      1. 선수강 스킬 스택의 첫번째 원소를 꺼내어 다음 targetSkill로 배정해준다.
  4. 위 3번 로직을 실행한 후 available 변수의 값이 true라면 가능한 스킬트리를 의미하는 것이므로 sum에 1을 더해준다.

💬 풀이

func solution(skill:String, skill_trees:[String]) -> Int {
    var sum = 0
    
    for tree in skill_trees {
        var preSkillset = Array(skill).map{ String($0) }
        var targetSkill = preSkillset.removeFirst()
        var available = true
        
        for currentSkill in tree {
            if preSkillset.contains(String(currentSkill)) {
                available = false
                break
            }
            
            if String(currentSkill) == targetSkill && preSkillset.count > 0 {
                targetSkill = preSkillset.removeFirst()
            }
        }
        
        sum += available ? 1 : 0
    }
    
    return sum
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant