https://programmers.co.kr/learn/courses/30/lessons/49993?language=java
코딩테스트 연습 - 스킬트리
programmers.co.kr
<내풀이>
skill_trees 한 요소에 skill을 string 배열로 만들어 요소들을하나씩 확인합니다. skill_tree 문자열 안에 skill의 요소들이 있는지 확인합니다. 그래서 없을 때랑 있을 때는 나눌 수 있습니다. 그 요소가 없을 때에는 마지막일 때는 answer를 하나씩 올리고 for문을 끝낸다. 마지막이 아닐때는 나머지 요소들이 skill_trees의 요소에 있는지 없는지 확인한다. 다 없으면 answer를 하나올립니다. 하나라도 있으면 그냥 for문을 끝냅니다. 이제 포함 되어 있을 때에는 index가 이전 index보다 큰지 확인합니다. 이 과정이 skill의 순서대로 인지 확인하는 작업입니다. 마지막 요소였을 때는 answer++ 해줍니다.
package al;
public class L16 {
public static int solution(String skill, String[] skill_trees) {
int answer = 0;
String[] skillArray = skill.split("");
for (int i = 0; i < skill_trees.length; i++) {
int index = -1;
for (int j = 0; j < skillArray.length; j++) {
if (skill_trees[i].indexOf(skillArray[j]) == (-1)) {
if (j == skillArray.length - 1) {
answer++;
break;
}
boolean b = true;
for (int k = j + 1; k < skillArray.length; k++) {
if (skill_trees[i].indexOf(skillArray[k]) != -1) {
b = false;
break;
}
}
if (b) {
answer++;
}
break;
} else {
if (index < skill_trees[i].indexOf(skillArray[j])) {
index = skill_trees[i].indexOf(skillArray[j]);
} else {
break;
}
if (j == skillArray.length - 1) {
answer++;
}
}
}
}
return answer;
}
public static void main(String[] args) {
String skill = "CBD";
String[] skill_trees = { "BACDE", "CBADF", "AECB", "BDA" };
System.out.println(solution(skill, skill_trees));
}
}
<남풀이>
skill에 있는 요소가 skill_trees 요소에 들어 있는지 없는지를 확인하는 것이 아니라, 반대로 skill_trees의 요소의 문자열이 skill에 있는지를 확인하는 방법이다. 이게 더 효율적인 것 같습니다. learningIdx가 배울 점인듯 합니다.
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = 0;
for (String skillTree : skill_trees) {
int learningIdx = 0;
boolean isAble = true;
for (char curSkill : skillTree.toCharArray()) {
int skillIdx = skill.indexOf(curSkill);
if (skillIdx == -1)
continue;
else if (skillIdx == learningIdx)
learningIdx++;
else {
isAble = false;
break;
}
}
if (isAble)
answer++;
}
return answer;
}
}
'컴퓨터 프로그래밍 > 알고리즘' 카테고리의 다른 글
프로그래머스-영어 끝말잇기 (0) | 2020.06.09 |
---|---|
프로그래머스-구명보트 (0) | 2020.06.09 |
프로그래머스-쇠막대기 (0) | 2020.06.06 |
프로그래머스-예상 대진표 (0) | 2020.06.06 |
프로그래머스-기능개발 (0) | 2020.06.04 |