https://programmers.co.kr/learn/courses/30/lessons/49993#
코딩테스트 연습 - 스킬트리
programmers.co.kr
//문제풀이 해석
/*
다른 스킬들의 순서는 상관없고(SKILL로 제공된 것들이 skill_trees에 없다면 배울수있음)
skill로 제공된 것의 순서가 맞아야함
CBD일경우 C CB CBD만 가능
*/
//실수한부분
//skill에 제공된것이 없다면 배울 수 없다고 착각하고 문제를 시작해버림
//조건에 대해 제대로 생각을 하지 않음 if문 쓰는것 그냥 생각나는대로 써버림
//문제 해석만하고 요구사항을 머리로만 정리 후 문제 풀이에 대한 방법을 생각하지 않음
//경우의수 if문 해석
//두가지 경우의 수가있는데
//ex cbd를 예시로놓고
//1.c와 b가 들어있는데 b의 index가 0이고 c가 1일때 순서가 맞지않아 안됨
//이때 prev > now 라는 조건이 만들어지고
//now가 index에없다면 무조건 크기때문에 now !=-1 이라는 조건을 추가하게됨
//1에서 cbd가 순서가 맞지가않는것에 대한 것을 했다면
//2에서는 이전 스킬이 있는지에 대해 판단한다
//2.이전스킬이 없는데 = index==-1인데
//다음스킬이 있다면 index>0 이라면 순서대로 스킬을 배워야하는 조건에 맞지않다
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = 0;
for(int j=0;j<skill_trees.length;j++){
int prev=skill_trees[j].indexOf(skill.charAt(0));
int now=0;
boolean check = true;
for(int i=1; i<skill.length();i++)
{
now=skill_trees[j].indexOf(skill.charAt(i));
if((prev > now && now !=-1) || (prev ==-1 && now != -1))
{
check=false;
break;
}
prev=now;
}
if(check==true)
{
answer++;
}
}
return answer;
}
}
----------------------------------------
다른사람 풀이
이 문제의 핵심은 skill이라는 것이 skill_trees에 들어있다면 순서에 맞게 포함되어있는것을 보는것이였다
그러면 다른 필요없는 것들은 skill_tress에서 삭제하고 순서에 맞게 들어가있는지를 확인 하면됬던 문제였다.
여기서알게된사실 indexOf("")는 0이다
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = 0;
for(int j=0;j<skill_trees.length;j++){
String re = skill_trees[j].replaceAll("[^"+skill+"]","" );
if(skill.indexOf(re)==0)
{
answer++;
}
}
return answer;
}
}
--------------------------------------
밑 맨 처음 코드
위 if문의 생각은 같았지만 제대로 해석하지못해 간결하게 생각하지 못했음
import java.util.*;
class Solution {
public int solution(String skill, String[] skill_trees) {
int answer = 0;
int[] check = new int[skill.length()];
//맨처음 나온게 1이아니다 break;
List<Integer> list = new ArrayList<Integer>();
move :
for(int j=0;j<skill_trees.length;j++){
list = new ArrayList<Integer>();
for(int i=0;i<skill_trees[j].length();i++)
{
int index=skill.indexOf(skill_trees[j].charAt(i));
//맨처음 나온게 1이아니다 break;
if(index !=-1)
{
list.add(index);
}
}
if(list.size()>0 && list.get(0) !=0)
{
continue move;
}
if(list.size()==1 && list.get(0) ==0)
{
answer++;
continue move;
}
int prev=0;
if(list.size()>0)
{
prev=list.get(0);
}
boolean bcheck=true;
mo:
for(int k=1;k<list.size();k++){
if(prev ==-1)
{
if(list.get(k) !=-1)
{
bcheck=false;
break;
}
}
else
{
if(list.get(k) == -1)
{
prev=list.get(k);
continue mo;
}
if(prev+1 != list.get(k))
{
bcheck=false;
break;
}
prev=list.get(k);
}
}
if(bcheck==true)
{
answer++;
}
}
return answer;
}
}
'프로그래머스 > 2단계' 카테고리의 다른 글
기능개발[JAVA] (0) | 2022.07.14 |
---|---|
멀쩡한 정사각형[JAVA] (0) | 2022.07.04 |
문자열 압축 (0) | 2022.06.22 |
구명보트 (0) | 2021.11.05 |