반응형
사이트명 : 프로그래머스(Programmers)
문제명 : 스킬트리
언어 : 자바(Java)
위의 내용은 쉬운 말을 어렵게 써 놨는데
우선 skill_trees를 쭉 받은 뒤 skill과 비교해봐야 하는데
C B D의 순서만 지키면 중간에 어떤 값이 들어와도 상관이 없고
C B D가 꼭 다 들어가지 않아도 된다
그러나 순서가 맞지 않는 경우에는 체크하면 안된다
요약해보니 간단한데
내 풀이방법은 아래와 같다
먼저 리스트 안에 skill 값을 잘라서 넣어주는데
skill.substring(i, i+1); 로 한글자식 잘라서 편하게 넣어줄 수 있다
다음에는 for문을 두번 돌려주는데
배열 skill_trees의 길이만큼
그리고 그 안에서 skill_trees[i]의 길이만큼(배열 인덱스 값당 길이)
돌리게 되는데
skill_trees[i].length만큼 for문을 돌릴 때
if문을 걸어줘서
skill_trees[i]를 한글자씩 잘라본 값이 list에 존재하는데
그 값이 0번째 1번째 2번째 순으로 증가한다면 정상적인 것이고(list.indexOf로 확인)
0번째부터 시작하는 것이 아니라면 스킬트리를 이상하게 올린 것이므로
answer에서 -1 시킨 후 break; 시킨다
for문을 계속 돌려가며 정상적이지 않은 스킬트리만 빼면
정상적인 스킬트리만 남게 되는데
이 값을 반환하면 끝이 난다
마지막으로 프로그래머스에 바로 적용 가능한 답안은 아래와 같다
import java.util.LinkedList;
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = skill_trees.length;
int treeValue = 0;
LinkedList<String> list = new LinkedList<>();
// List 안에 Skill 값을 하나씩 잘라 넣어줌..
for(int i = 0; i<skill.length(); i++) {
list.add(skill.substring(i, i+1));
}
// skill_trees를 가져온다
// 선행 스킬 순서 skill의 길이는 1 이상 26 이하이며, 스킬은 중복해 주어지지 않습니다
// 비교 시 skill에 속하는 값인데 최초값 혹은 현재값보다 크다면 X
// 트리를 다 수행하지 않아도 PASS
for(int i = 0; i<skill_trees.length; i++) {
for(int j = 0; j<skill_trees[i].length(); j++) {
if(list.contains(skill_trees[i].substring(j, j+1))) {
// 정상적으로 스킬트리를 진행할 경우
if(treeValue == list.indexOf(skill_trees[i].substring(j, j+1))) {
treeValue++; // KEEP GOING
} else { // 스킬트리 순서가 잘못된 경우
answer = answer - 1;
break; // 중단
}
}
}
treeValue = 0;
}
return answer;
}
}
반응형
'Language > 알고리즘 문제풀이' 카테고리의 다른 글
프로그래머스 약수의 합 풀이(Java) (0) | 2019.09.04 |
---|---|
프로그래머스 이상한 문자 만들기 풀이(Java) (0) | 2019.09.04 |
프로그래머스 탑 풀이(Java) (0) | 2019.09.03 |
프로그래머스 소수 찾기 풀이 (0) | 2019.09.01 |
프로그래머스 직사각형 별찍기 풀이 (0) | 2019.09.01 |
댓글