알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄

 

https://school.programmers.co.kr/learn/courses/30/lessons/155652

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


Think🤔

 

class Solution {
    public String solution(String s, String skip, int index) {
        String answer = "";
        return answer;
    }
}

 

s에 있는 값 "aukks" 이고

skip에 있는 값 "wbqd"

index는 5

result happy가 나와야 한다.

s에 있는 값을 각 글자에 더해주는데 skip에 있는 값이 나오면 그 값은 바로 무시해주고 다음 문자로 넘어간다.

 

a -> b -> c -> d -> e -> f 이렇게 하면 5번인데 

a -> b -> c -> d -> e -> f -> g -> h , skip에 단어 b와 d가 있으므로 그 값은 건너뛰어준다.

u -> v -> w -> x -> y - > z -> a , 다시 a로

 

이런식으로 바꿔주면 됨.

 

class Solution {
    public String solution(String s, String skip, int index) {
        String answer = "";
        
        for(int i=0; i<s.length(); i++){
            char ch = s.charAt(i);
            int cnt = index; // cnt에 5 들어감
            while(cnt > 0){
                if(skip.contains(String.valueOf(ch)) == true){
                    ch++;
                } else{
                    ch++;
                    cnt--;
                }
                
                if(ch == '{'){
                    ch-=26;
                } 
            }
            answer += ch;
        }
                
        return answer;
    }
}

 

한 2~3개 밖에 통과를 안함.

 

반복문 돌려서 'z'가 될 경우 ASCII 코드로는 123이니깐 그럴 경우 소문자 a로 다시가게 26을 빼줬는데 안됨.

 

질문하기에 반례를 참고해서 테스트 케이스에 추가

 

입력값 〉 "bcdefghijklmnopqrstuvwxyz", "a", 1
기댓값 〉 "cdefghijklmnopqrstuvwxyzb"

입력값 〉 "klmnopqrstuvwxyz", "abcdefghij", 20
기댓값 〉 "opqrstuvwxyzklmn"

 

마지막 경계값에서 z -> a로 변환하는 순간 z는 skip에 안걸려서 a로 변환시키고 끝나는데

skip을 해서 [ K ] 값이 나와야 함 [ A] 가 아닌

 

klmnopqrstuv[w]xyz
opqrstuvwxyz[a]lmn
opqrstuvwxyz[k]lmn

 

class Solution {
    public String solution(String s, String skip, int index) {
        String answer = "";
        
        for(int i=0; i<s.length(); i++){
            char ch = s.charAt(i);
            
            for(int j=0; j<index; j++){
                ch++;
                
                if(ch == '{'){
                    ch -= 26;
                }
                
                if(skip.contains(String.valueOf(ch))){
                    j--;
                }
            }
            
            answer += ch;
        }
                
        return answer;
    }
}

 

처음에 하려던 j--방법을 이용해서 한다 통과


Solution✍

 

class Solution {
    public String solution(String s, String skip, int index) {
        String answer = "";
        
        for(int i=0; i<s.length(); i++){
            char ch = s.charAt(i);
            
            for(int j=0; j<index; j++){
                ch++;
                
                if(ch == '{'){
                    ch -= 26;
                }
                
                if(skip.contains(String.valueOf(ch))){
                    j--;
                }
            }
            
            answer += ch;
        }
                
        return answer;
    }
}

 

Review🤩

 

경계값 테스트의 중요성을 깨달음

최소값 , 최대값 , 중간값 등의 특별한 경우 주로 테스트 

 


 

+ Recent posts