알고리즘 문제/프로그래머스

프로그래머스 스킬트리 (C#)

우대비 2025. 1. 25. 14:02
반응형
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

스킬을 배우는 순서를 입력 받고 유저들이 올린 스킬트리를 입력 받을 때, 선행 스킬 조건을 준수한 스킬트리의 개수를 구해주세요.

 

 

풀이 방법

HashSet을 이용하여 풀이 했습니다. 

HashSet<char> h = new HashSet<char>();
foreach (char c in skill)
    h.Add(c);

skill의 요소를 HashSet에 넣어서 요소를 쉽게 찾을 수 있게 했습니다.

 

foreach (string tree in skill_trees)
{
    List<char> list = new List<char>();
    foreach (char c in tree)
    {
        if (h.Contains(c))
            list.Add(c);
    }

유저의 스킬트리를 순회하여 선행 요소에 포함되는 것들을 List에 넣었습니다.

 

bool flag = true;
for (int i = 0; i < list.Count; i++)
{
    if (list[i] != skill[i])
    {
        flag = false;
        break;
    }
}

리스트와 선행 스킬을 비교하여 일치하지 않다면 불가능하다고 판단합니다.

리스트의 개수만큼만 반복문을 진행하도록 하여 선행 요소가 없는 경우, 하나만 있는 경우에도 flag가 true로 되도록 했습니다.

 

if (flag)
    answer++;

flag가 true라면 answer을 1 올려주고 반환해줍니다.

 

 

 

정답 코드

using System;
using System.Collections.Generic;

public class Solution {
    public int solution(string skill, string[] skill_trees) {
        int answer = 0;
        
        HashSet<char> h = new HashSet<char>();
        foreach (char c in skill)
            h.Add(c);
        
        foreach (string tree in skill_trees)
        {
            List<char> list = new List<char>();
            foreach (char c in tree)
            {
                if (h.Contains(c))
                    list.Add(c);
            }
            
            bool flag = true;
            for (int i = 0; i < list.Count; i++)
            {
                if (list[i] != skill[i])
                {
                    flag = false;
                    break;
                }
            }
            if (flag)
                answer++;

        }
        
        return answer;
    }
}
반응형
LIST