ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 15. 스킬트리
    코딩 테스트/Level 2 2020. 7. 29. 16:32
    반응형

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

     

    코딩테스트 연습 - 스킬트리

     

    programmers.co.kr

    파이썬

    def solution(skill, skill_trees):
        answer = 0
        for user_skill in skill_trees:
            temp = []
            for each in user_skill:
                if each in skill:
                    new_position = skill.index(each)
                    temp_length = len(temp)
                    if temp_length == 0 and new_position != 0:
                        break
                    if temp_length > 0 and new_position != temp[-1] + 1:
                        break
                    temp.append(new_position)
            else:  # no break~!
                answer += 1
        return answer
    테스트 1 〉	통과 (0.04ms, 10.7MB)
    테스트 2 〉	통과 (0.04ms, 10.8MB)
    테스트 3 〉	통과 (0.04ms, 10.7MB)
    테스트 4 〉	통과 (0.04ms, 10.7MB)
    테스트 5 〉	통과 (0.05ms, 10.8MB)
    테스트 6 〉	통과 (0.04ms, 10.7MB)
    테스트 7 〉	통과 (0.05ms, 10.7MB)
    테스트 8 〉	통과 (0.04ms, 10.7MB)
    테스트 9 〉	통과 (0.04ms, 10.8MB)
    테스트 10 〉	통과 (0.04ms, 10.6MB)
    테스트 11 〉	통과 (0.05ms, 10.8MB)
    테스트 12 〉	통과 (0.04ms, 10.7MB)
    테스트 13 〉	통과 (0.05ms, 10.8MB)
    테스트 14 〉	통과 (0.04ms, 10.7MB)

    간만에 속도를 우선해 코딩해보았다...
    리스트로 큐를 구현하면 코드 자체는 더 깔끔하지만...
    사실 생각나는 데로 코딩했을 뿐...

    파이썬에는 for else가 있다. for 문에서 브레이크가 걸리지 않고 종료되면 else 파트가 실행된다. 
    다른 언어에서는 없는 구문이라 신서틱 슈거 같은 느낌이랄까? 쓰기 부담스럽다.
    본인도 파이썬을 오래간만에 쓰면 헛갈리기도 한다. 브레이크가 걸린 건지 안 걸린 건지.. 
    그래서 사용할 때마다 주석을 달아둔다. 

    자바 스크립트

    function solution(skill, skill_trees) {
        let answer = 0;
        for (let i = 0; i < skill_trees.length; i++) {
            let user_skill = skill_trees[i]
            let temp = []
            let check = false
            for (let j = 0; j < user_skill.length; j++) {
                let new_position = skill.indexOf(user_skill[j])
                if (new_position > -1) {
                    if (temp.length == 0 && new_position != 0) {
                        check = true
                        break
                    }
                    if (temp.length > 0 && new_position != temp[temp.length - 1] + 1) {
                        check = true
                        break
                    }
                    temp.push(new_position)
                }
            }
            if (check == false) answer += 1
        }
        return answer
    }
    테스트 1 〉	통과 (1.62ms, 37.6MB)
    테스트 2 〉	통과 (1.64ms, 37.3MB)
    테스트 3 〉	통과 (1.75ms, 37.4MB)
    테스트 4 〉	통과 (1.68ms, 37.4MB)
    테스트 5 〉	통과 (1.78ms, 37.3MB)
    테스트 6 〉	통과 (1.62ms, 37.3MB)
    테스트 7 〉	통과 (1.63ms, 37MB)
    테스트 8 〉	통과 (1.70ms, 37.2MB)
    테스트 9 〉	통과 (1.73ms, 37.3MB)
    테스트 10 〉	통과 (1.79ms, 37.4MB)
    테스트 11 〉	통과 (1.74ms, 37.3MB)
    테스트 12 〉	통과 (1.61ms, 37.3MB)
    테스트 13 〉	통과 (1.64ms, 37.5MB)
    테스트 14 〉	통과 (1.72ms, 37.3MB)

    C#

    using System.Collections.Generic;
    
    public class Solution
    {
        public int solution(string skill, string[] skill_trees)
        {
            int answer = 0;
            foreach (string user_skill in skill_trees) {
                bool checker = false;
                var temp = new List<int>();
                foreach (char each in user_skill){
                    var newPosition = skill.IndexOf(each);
                    if (newPosition > -1)
                    {
                        if (temp.Count == 0 && newPosition != 0)
                        {
                            checker = true;
                            break;
                        }
                        if (temp.Count > 0 && newPosition != temp[temp.Count -1] + 1)
                        {
                            checker = true;
                            break;
                        }
                        temp.Add(newPosition);
                    }
                }
                if (checker == false) answer++;
            }
            return answer;
        }
    }
    테스트 1 〉	통과 (12.62ms, 56.3MB)
    테스트 2 〉	통과 (13.14ms, 52.5MB)
    테스트 3 〉	통과 (13.33ms, 56.8MB)
    테스트 4 〉	통과 (13.27ms, 58.9MB)
    테스트 5 〉	통과 (13.65ms, 58.5MB)
    테스트 6 〉	통과 (12.37ms, 56.8MB)
    테스트 7 〉	통과 (12.59ms, 54.9MB)
    테스트 8 〉	통과 (13.27ms, 54.7MB)
    테스트 9 〉	통과 (13.23ms, 58.7MB)
    테스트 10 〉	통과 (12.95ms, 58.5MB)
    테스트 11 〉	통과 (12.36ms, 54.8MB)
    테스트 12 〉	통과 (12.72ms, 54.7MB)
    테스트 13 〉	통과 (12.66ms, 52.5MB)
    테스트 14 〉	통과 (12.44ms, 52.8MB)

    Java

    import java.util.ArrayList;
    
    class Solution {
        public int solution(String skill, String[] skill_trees) {
            int answer = 0;
            for (String user_skill : skill_trees) {
                boolean checker = false;
                ArrayList<Integer> temp = new ArrayList<>();
                for (char each : user_skill.toCharArray()){
                    int newPosition = skill.indexOf(each);
                    if (newPosition > -1)
                    {
                        if (temp.size() == 0 && newPosition != 0)
                        {
                            checker = true;
                            break;
                        }
                        if (temp.size() > 0 && newPosition != temp.get(temp.size() -1) + 1)
                        {
                            checker = true;
                            break;
                        }
                        temp.add(newPosition);
                    }
                }
                if (checker == false) answer++;
            }
            return answer;
        }
    }
    
    테스트 1 〉	통과 (0.85ms, 54.1MB)
    테스트 2 〉	통과 (0.80ms, 50.6MB)
    테스트 3 〉	통과 (0.75ms, 50.7MB)
    테스트 4 〉	통과 (0.74ms, 52.1MB)
    테스트 5 〉	통과 (0.89ms, 50.1MB)
    테스트 6 〉	통과 (0.92ms, 52MB)
    테스트 7 〉	통과 (0.84ms, 52.7MB)
    테스트 8 〉	통과 (0.77ms, 50MB)
    테스트 9 〉	통과 (0.72ms, 50.3MB)
    테스트 10 〉	통과 (0.83ms, 52.5MB)
    테스트 11 〉	통과 (0.95ms, 52.7MB)
    테스트 12 〉	통과 (0.78ms, 52.4MB)
    테스트 13 〉	통과 (0.80ms, 50MB)
    테스트 14 〉	통과 (0.92ms, 52.2MB)

     

    반응형
Designed by Tistory.