Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 후위 표기법
- 튜플
- 점프와 순간이동
- fragment identifier
- 어려웠던 문제
- 완전탐색
- Dynamic Programming
- 메뉴리뉴얼
- 에라토스테네스의 체
- 순열
- 보이어무어
- 문자열
- pandas
- Java
- 쿼드압축 후 개수세기
- HashSet
- 동적계획법
- 영문자 확인
- 완전 탐색
- 반복문
- 최소공배수
- 조합
- 규칙찾기
- python
- 프로그래머스
- 2017 카카오 코드
- Stack
- HashMap
- 알고리즘
- dfs
Archives
- Today
- Total
csmoon1010의 SW 블로그
[200520] 스킬트리 - Summer/Winter Coding(~2018)(level2) 본문
Coding Test/프로그래머스
[200520] 스킬트리 - Summer/Winter Coding(~2018)(level2)
csmoon1010 2020. 5. 20. 21:221. 문제이해
- skill(선행 스킬 순서) : 꼭 순서대로 수행해야하는 스킬 순서
- skill_tress(스킬 트리) : 유저가 스킬을 배울 순서
- skill_tress의 원소들 중 skill의 순서를 따라서 가능한 스킬 트리의 개수를 return
2. 전략
(1) skillMap 해시맵
- HashMap<String, Integer> : <원소, 순서>
- skill에 포함되는 원소인지 확인할 때 유용하기 때문에 : containsKey(s)
(2) skill_trees 확인
- answer : skill_trees의 개수로 초기화
- skillMap.containsKey(s) : skill에 포함되는 원소인지 확인
- current : 현재 확인 중인 skill의 순서(0부터 시작)
- current == skillMap.get(s)라면 current++, 아니라면 answer--
3. 참고사항
- contains관련 함수가 있는 자료구조, 컬렉션
- List 컬렉션 : contains()
- Set 컬렉션 : contains()
- Map 컬렉션 : containsKey(), containsValue()
- 다른 풀이 : ArrayList, Iterator 이용
(1) ArrayList
- Arrays.asList(skill_trees)로 ArrayList 초기화
(2) String
- indexOf(요소) : 요소의 index 확인
(3) Iterator
- ArrayList를 iterator로 바꿔서 loop에 이용
- it.next().replaceAll("[^"+ skill + "]", "") : skill에 있는 요소만 남김
**(2)+(3) : if (skill.indexOf(it.next().replaceAll("[^" + skill + "]", "")) != 0)
skill_trees의 해당 요소들이 skill에 포함되는 지 확인하는 코드
4. 코드
import java.util.*;
class Solution {
public int solution(String skill, String[] skill_trees) {
//hashmap 형성
String[] temp = skill.split("");
HashMap<String, Integer> skillMap = new HashMap<>();
for(int i = 0; i < temp.length; i++){
skillMap.put(temp[i], i);
}
//스킬트리 확인
int current = 0;
int answer = skill_trees.length;
for(String str : skill_trees){
current = 0;
String[] s_temp = str.split("");
for(String s : s_temp){
if(skillMap.containsKey(s)){
if(current == skillMap.get(s)){
current++;
continue;
}
else{
answer--;
break;
}
}
}
}
return answer;
}
}
'Coding Test > 프로그래머스' 카테고리의 다른 글
[200524] 문자열 압축 - 2020 KAKAO BLIND RECRUITMENT(level2) (0) | 2020.05.24 |
---|---|
[200520] 124 나라의 숫자 - 연습문제(level2) (0) | 2020.05.20 |
[200519] [1차]다트 게임 - 2018 KAKAO BLIND RECRUITMENT(level1) (0) | 2020.05.19 |
[200519] 실패율 - 2019 KAKAO BLIND RECRUITMENT(level1) (0) | 2020.05.19 |
[200516] 예산 - Summer/Winter Coding(~2018)(level1) (0) | 2020.05.16 |
Comments