하루에 한 문제
[프로그래머스-lv2 Summer/Winter Coding(~2018)]스킬트리 -Java 본문
https://programmers.co.kr/learn/courses/30/lessons/49993
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = 0;
int skillLen=skill.length(); //스킬의 길이
loop: for(int i=0; i<skill_trees.length; i++){
int skillIndex=0;
String skill_tree=skill_trees[i];
for(int j=0; j<skill_tree.length(); j++){ //하나의 스킬트리의 길이만큼
int check=skill.indexOf(skill_tree.charAt(j));
if(check==-1) continue; //-1이면 skill과 상관없음 그냥 넘어감
else if(check==skillIndex){
skillIndex++;
}
else continue loop; //체크와 인덱스가 다르면 선행스킬을 안배웠다는 뜻
}
answer++; //위의 포문을 나왔다는 뜻은 스킬트리를 잘 배웠다는 뜻
}
return answer;
}
}
소요시간 : 7분
오늘 백준에 주사위윷놀이 문제를 2시간 가까이 풀었는데... 로직을 잘못짠거를 발견해서..
내일쯤이나 다시 풀어볼 예정입니다..ㅜㅜㅜㅜ
이제 IDE없이 프로그래머스에서 바로 문제 푸는게 조금씩 익숙해지는 것같습니다...ㅎㅎ
로직을 살펴보면 skillIndex라는 변수를 통해서 선행스킬을 배웠는지 안배웠는지 확인합니다
skillIndex는 0에서 부터 skill.length()-1까지 증가하면서 선행스킬을 배웠는지 확인하는 용도입니다
1. skill_tree의 글자가 skill에 포함되는지 확인합니다. (String.indexOf 사용)
2. 만약 -1이라면 (글자가 포함되어 있지 않다면) 선행스킬과 관계없는 스킬이기 때문에 그냥 skip해줍니다.
3. 만약 -1이 아니라면 현재 skillIndex와 같은지 확인합니다. 만약 다르다면 선행스킬을 배우지 않은것임으로
그 skilltree는 skip해줍니다.
4. 만약 skillIndex와 값이 같다면 선행스킬을 차근차근 배우고 있는 중임으로 그다음을 확인해줍니다.
끝~~~
'알고리즘 > 프로그래머스 lv2 다시풀기' 카테고리의 다른 글
[프로그래머스-lv2 2017팁스타운]짝지어 제거하기 (2) | 2021.03.24 |
---|---|
[프로그래머스-lv2]N개의 최소공배수 -Java (0) | 2021.03.24 |
[프로그래머스-lv2]타겟 넘버 -Java (0) | 2021.03.23 |
[프로그래머스-lv2 Summer/Winter Coding(~2018)]점프와 순간이동 -Java (0) | 2021.03.23 |
[프로그래머스-lv2 2018 KAKAO BLIND RECRUITMENT] n진수 게임 -Java (1) | 2021.03.21 |
Comments