본문 바로가기

Programmers

[프로그래머스][JAVA]Lv. 2 - 스킬트리

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

 

프로그래머스

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

programmers.co.kr

import java.util.Arrays;
import java.util.HashSet;
class Solution {
    public int solution(String skill, String[] skill_trees) {
        int answer = 0;

        String[] order = skill.split("");
        HashSet<String> hashSet = new HashSet<>(Arrays.asList(order));
        for (int i = 0; i < skill_trees.length; i++) {
            String[] skill_list = skill_trees[i].split("");
            StringBuilder sb = new StringBuilder();
            for (int j = 0; j < skill_list.length; j++) {
                if (hashSet.contains(skill_list[j])) {
                    sb.append(skill_list[j]);
                }
            }
            if (sb.toString().equals("")) skill_trees[i] = skill;
            else skill_trees[i] = sb.toString();
        }
        for (int i = 0; i < skill_trees.length; i++) {
            boolean flag = false;
            int index = 0;
            String[] skill_list = skill_trees[i].split("");
            for (int j = 0; j < skill_list.length; j++) {
                if (skill_list[j].equals(order[index])) {
                    index++;
                    flag = true;
                } else {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                answer++;
            }
        }
        return answer;
    }
}

 

일단 skill을 한 단어씩 떼어내고 HashSet에 저장하고 skill_trees 배열의 각 원소의 단어를 한 단어씩 HashSet에 있는지를 확인하고 StringBuilder에 추가를 하였다.

만약 skill_trees 원소에 HashSet에 있는 게 없다면 조건에 맞다고 생각하고 해당 skill_trees의 원소를 skill로 대체하였다.

아니라면 skill_trees 원소를 StringBuilder로 대체하였다.

그리고 다시 skill의 순서와 skill_trees의 순서를 가지고 만약 순서가 틀리면 false로 하여서 true인 경우로 끝난 경우에 answer를 증가시켜 답을 만들었다.

 

뭔가 조잡해 보인다...

더 잘해보자