728x90
⬛ 프로그래머스 (Summer/Winter) | LV.2 스킬트리 - 구현 문풀 (Java)
https://school.programmers.co.kr/learn/courses/30/lessons/49993#fnref1
💚문제 접근 방식
선행 스킬 순서를 지킨 스킬트리 내의 문자열 개수를 구하는 문제이다.
일단 skill_trees 내부에 선행 스킬에 있는 문자만 이어붙이도록 했다. (나중에 찾아보니 이 부분을 replace로 대체해서 하는 방법도 있었다. 나의 경우는 skill 길이가 26까지니까 그냥 이어붙임)
[주의할 점]
🎈(1) 중간에 약간 헷갈렸던 부분이 있었는데, 예를 들어 skill_trees에 선행 스킬과 아예 관련없는 문자열이 주어진다면 어떻게 처리할 것이냐에 부딪혔다.
“CBD” : [”BACDE”, “BDA”, “QWER”]
→ 이런 식으로 들어온다면 QWER에는 아예 선행 스킬 관련 문자가 없기 때문에 순서를 지킨 것이나 다름 없어서 처리를 해주어야 한다.
🎈(2) 그리고 “BD”의 경우 CBD 순서를 못지킨 케이스가 된다. B는 C 이후만 되기 때문이다.
→ 이 두 가지 주의점을 모두 포괄하려면 결국 기존 선행스킬을 (해당 문자열만 이어붙인 새 List상의) 문자열 길이만큼 substring으로 잘라서 두 문자열 같은지 비교해주는 방법을 사용하면 됐다.
[풀이 정리]
1) skill_trees 상의 각 문자열에 대해서 선행스킬에 존재하는 문자열로만 이어붙여 새로운 List에 담는다.
2) 이제 List를 순회하면서 해당 문자열 길이만큼 선행스킬 문자를 자르고 비교하여 같은 개수만큼 ++ 처리해주면 된다.
→ 이러면 자연스럽게 순서를 지켰는지 확인이 되기 때문
💚 제출 코드
import java.util.*;
class Solution {
//솔루션 함수
public int solution(String skill, String[] skill_trees) {
int answer = 0;
List<String> list = new ArrayList<>();
for(String sk : skill_trees){
char[] tmp = sk.toCharArray();
String str = "";
for(char c : tmp){
if(skill.contains(String.valueOf(c))){
str += c;
}
}
list.add(str);
}
for(String x : list) {
String tmp = skill.substring(0, x.length());
if(tmp.equals(x)) answer++;
}
return answer;
}
}
728x90
'코딩 테스트 [준비] > [문풀] 프로그래머스_문풀_조지기' 카테고리의 다른 글
프로그래머스 | LV.3 업그레이드 할 수 없는 아이템 구하기 (MySQL) (1) | 2024.04.29 |
---|---|
프로그래머스 (카카오) | LV.2 메뉴 리뉴얼 - DFS (Java) (1) | 2024.04.29 |
프로그래머스 | LV.2 택배상자 - Stack & 구현 문풀 (Java) (0) | 2024.04.27 |
프로그래머스 | LV.2 구명보트 - 그리디 문풀 (Java) (31) | 2024.04.18 |
프로그래머스 | LV.2 조이스틱 - 구현 문풀 (Java) (0) | 2024.04.15 |