https://programmers.co.kr/learn/courses/30/lessons/49993#
며칠 전에 이 문제를 풀고 테스트 케이스 4갠가.. 5개정도가 맞지 않아서 당황해서 다음에 다시 한번 풀어서 올린다는 글을 올렸었는데요.
그 이후에 회사 업무 때문에 시간이 나질 않아서 못풀고 있다가 오늘 카페와서 30분정도 고민한 결과! 틀린 점을 찾아냈습니다..
수정 전 풀이 (틀림)
import java.util.*;
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = 0;
int temp = 0;
String[] skill_split = skill.split("");
for(String str : skill_trees){
String[] skill_tree = str.split("");
Queue<String> use_able = new LinkedList<>();
Queue<String> use_not = new LinkedList<>();
for(int i=0; i<skill_split.length; i++){
if(i==0)
use_able.offer(skill_split[i]);
else
use_not.offer(skill_split[i]);
}
String last = skill_split[0];
for(int i=0; i< skill_tree.length; i++){
if(skill.contains(skill_tree[i])){
if(use_able.contains(skill_tree[i])){
if(skill_tree[i].equals(last)){
last = use_not.peek();
use_able.offer(use_not.poll());
}
} else{
break;
}
}
temp++;
if(temp == skill_tree.length){
answer++;
temp=0;
}
}
}
return answer;
}
}
수정 후 풀이
import java.util.*;
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = 0;
int temp = 0;
String[] skill_split = skill.split("");
for(String str : skill_trees){
String[] skill_tree = str.split("");
Queue<String> use_able = new LinkedList<>();
Queue<String> use_not = new LinkedList<>();
for(int i=0; i<skill_split.length; i++){
if(i==0){
use_able.offer(skill_split[i]);
}
else{
use_not.offer(skill_split[i]);
}
}
String last = skill_split[0];
for(int i=0; i< skill_tree.length; i++){
if(skill.contains(skill_tree[i])){
if(use_able.contains(skill_tree[i])){
if(skill_tree[i].equals(last)){
last = use_not.peek();
use_able.offer(use_not.poll());
}
} else{
break;
}
}
temp++;
if(temp == skill_tree.length){
answer++;
}
}
temp=0;
}
return answer;
}
}
혹시 차이점이 보이시나요..
temp의 초기화 부분이 잘못되었습니다. ㅜㅜ
스킬트리의 순서가 다른 경우 break를 해서 반복문을 벗어나게 되는데 이 때 새로운 LOOP, 즉 다른 스킬이 입력되는 상황에서 temp에 대한 초기화를 해주지 않아서 틀렸던 거였습니다.
9가지 이상의 테스트케이스가 맞길래 문제가 로직에 있다고 생각해서 그 쪽 부분만 보다보니까 시야가 협소해진 것 같습니다..
'알고리즘' 카테고리의 다른 글
프로그래머스 - 124 나라의 숫자 (0) | 2020.03.21 |
---|---|
프로그래머스 - 탑 (0) | 2020.03.21 |
프로그래머스 - 스킬트리(틀림) (1) | 2020.03.19 |
프로그래머스(Level 2) - 더 맵게 (1) | 2020.03.15 |
프로그래머스(Level2) - 가장 큰 수 (0) | 2020.03.15 |