Programming/프로그래머스
[프로그래머스] 스킬트리 (java)
쬬앤
2020. 3. 23. 15:26
[문제]
[문제접근]
[코드]
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = 0;
boolean[] visit = new boolean[skill.length()];
for(int i = 0; i < skill_trees.length; i++){
String mySkill = skill_trees[i];
int skillIndex = 0;
boolean flag = true;
for(int j = 0; j < mySkill.length(); j++){
for(int k = 0; k < skill.length(); k++){
if(skill.charAt(k) == mySkill.charAt(j)){
if(k == skillIndex)
skillIndex++;
else
flag = false;
}
}
}
if(flag == true)
answer++;
}
return answer;
}
}
3중 for문인게 좀 마음에 안든다.
[다른 풀이]
public int solution(String skill, String[] skill_trees) {
int answer = 0;
int treeLength = skill_trees.length;
for(int i=0; i<treeLength; i++){
boolean flag = true;
String[] skills = skill_trees[i].split("");
int cnt=0;
int skillsLen = skills.length;
for(int j=0; j<skills.length; j++){
if(cnt < skill.indexOf(skills[j])){
flag = false;
break;
}else if(cnt == skill.indexOf(skills[j])){
cnt++;
}
}
if(flag){
answer++;
}
}
return answer;
}
[또다른 풀이]
import java.util.*;
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = 0;
ArrayList<String> skillTrees = new ArrayList<String>(Arrays.asList(skill_trees));
//ArrayList<String> skillTrees = new ArrayList<String>();
Iterator<String> it = skillTrees.iterator();
while (it.hasNext()) {
if (skill.indexOf(it.next().replaceAll("[^" + skill + "]", "")) != 0) {
it.remove();
}
}
answer = skillTrees.size();
return answer;
}
}
[참고]
https://n1tjrgns.tistory.com/184
[프로그래머스] 스킬트리 (level 2)
프로그래머스 스킬트리 스킬트리 문제 설명 선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다. 예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저..
n1tjrgns.tistory.com
[링크]