-
15. 스킬트리코딩 테스트/Level 2 2020. 7. 29. 16:32반응형
https://programmers.co.kr/learn/courses/30/lessons/49993
파이썬
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)
반응형