티스토리 뷰

Algorithm

Algorithm) Programmers-스킬트리 swift

행복하고 싶은 사람 2022. 10. 25. 11:48

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

구현 문제였습니다. 인덱싱하기 쉽게 String을 Array로 바꿔두고 시작합니다

Skill_trees의 최대 길이가 20이므로 스킬 하나 하나 찍을때마다 skill 배열을 조회합니다. 이전 스킬이 안찍혀있으면 false 찍혀있으면 true 이런 방식으로 풀어봤습니다 변수이름을 좀 어지럽게 써뒀네요.. 

import Foundation

func solution(_ skill:String, _ skill_trees:[String]) -> Int {
    var ans = 0
    let skill = skill.map({ $0 })
    var skillTrees = [[Character]]()
    for skillTree in skill_trees {
        let tmp = skillTree.map({ $0 })
        skillTrees.append(tmp)
    }
    
    for i in 0..<skillTrees.count {
        var skillChain = [(Character, Int)]()
        for i in 0..<skill.count {
            skillChain.append((skill[i], 0)) //초기화
        }
        var trigger = true
        for j in 0..<skillTrees[i].count {
            if skill.contains(skillTrees[i][j]) {
                if skillTrees[i][j] == skill[0] {
                    skillChain[0] = (skillTrees[i][j] ,1)
                } else {
                    for k in 0..<skill.firstIndex(of: skillTrees[i][j])! {
                        if skillChain[k].1 == 0 {
                            trigger = false
                        }
                        if trigger == false {
                            break
                        } else {
                            skillChain[skill.firstIndex(of: skillTrees[i][j])!] = (skillTrees[i][j],1)
                        }
                    }
                }
            }
            if trigger == false {
                break
            }
        }
        if trigger == true {
            ans += 1
        }
    }
    
    return ans
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함