https://school.programmers.co.kr/learn/courses/30/lessons/49993
조건
제한시간 : 45분 이내
중요한 포인트를 짚어보자.
1. skill 변수로 받은 선행 스킬 순서를 지키는 지 확인해야한다.
2. 선행 스킬 순서를 다 쓰지 않아도 된다.
3. 선행 스킬 순서 목록에 없는 스킬이 존재한다.
이렇게 생각을 했을 때, 내가 구현한 코드 Flow를 설명하겠다.
1. 먼저 HashMap 에 알파벳 마지막 수인, 26이라는 수를 초기화한다. why? 우선순위 꼴지라 그렇다.
2. 선행 스킬 순서로 HashMap 에서 우선순위를 결정해서 다시 초기화한다.
3. 이중 for문을 돌면서 문제에서 언급한 내용이 아닐 경우에 최종 retrun 값 수를 차감한다.
4. return 값이 정답니다.
import java.util.*;
class Solution {
final int ALPHA = 26;
public int solution(String skill, String[] skill_trees) {
int answer = skill_trees.length;
HashMap<Character, Integer> alpha = new HashMap<>();
for (int i = 0; i < ALPHA; i++) {
char key = (char)(65 + i);
alpha.put(key, ALPHA);
}
for (int i = 0; i < skill.length(); i++) {
char s = skill.charAt(i);
alpha.put(s, i);
}
for (int i = 0; i < skill_trees.length; i++) {
int order = 0;
String skillOrder = skill_trees[i];
for (int j = 0; j < skillOrder.length(); j++) {
int a = alpha.get(skillOrder.charAt(j));
if(a == ALPHA) continue;
if(a != order) {
answer--;
break;
}
order++;
}
}
return answer;
}
}
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스 *Java] - 방금 그곡 (0) | 2022.08.19 |
---|---|
[프로그래머스 *Java] - 점프와 순간이동 (0) | 2022.08.18 |
[프로그래머스 *Java] - 주식 가격 (문제 재 해석 참고) (0) | 2022.08.11 |
[프로그래머스 *Java] - 타겟 넘버 (0) | 2022.07.28 |
[프로그래머스 *Java] 영어 끝말잇기 (0) | 2022.07.28 |