스킬트리
문제정의
스킬트리의 순서를 만족하는 문자열이 몇개가 되는지 반환하는 문제이다. 롤에서 먼저가야할 템트리를 생각하면 쉬울 것 같다.
문제풀이
전체 코드는 다음과 같다. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44import java.util.*;
public class SkillTree {
//프로그래머스 문제풀이 level2 스킬트리
public static void main(String[] args)
{
String skill = "CBD";
String[] skill_trees = {"BACDE", "CBADF", "AECB", "BDA"};
int answer = 0;
boolean isAdd = true;
HashMap<Character, Integer> map = new HashMap<>();
char[] skill_arr = skill.toCharArray();
int v = 0;
for(char c : skill_arr)
{
map.put(c, v);
v++;
}
for(String s : skill_trees)
{
int pre_v = -1;
char[] skill_tree_arr = s.toCharArray();
for(char c : skill_tree_arr)
{
int value = map.getOrDefault(c, -1);
if(value != -1 && value - pre_v != 1)
{
isAdd = false;
break;
}
else if(value != -1)
pre_v = value;
}
if(isAdd)
answer++;
isAdd = true;
}
System.out.print(answer);
}
}1
2
3
4
5
6
7
8
9boolean isAdd = true;
HashMap<Character, Integer> map = new HashMap<>();
char[] skill_arr = skill.toCharArray();
int v = 0;
for(char c : skill_arr)
{
map.put(c, v);
v++;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18for(String s : skill_trees)
{
int pre_v = -1;
char[] skill_tree_arr = s.toCharArray();
for(char c : skill_tree_arr)
{
int value = map.getOrDefault(c, -1);
if(value != -1 && value - pre_v != 1)
{
isAdd = false;
break;
}
else if(value != -1)
pre_v = value;
}
if(isAdd)
answer++;
isAdd = true;
테스트
정규식을 통해 문제를 푼 사람도 있어서 신기했다. skill_trees의 각 원소에서 skill이 아닌 문자들을 지운뒤, indexOf를 활용하여 순서를 유지하는지 확인하였다. 이럴 경우 코드 수가 많이 줄어들어 가독성이 좋았다. 나도 정규식을 좀 더 공부해 봐야겠다.