마이의 개발 블로그

[프로그래머스] 둘만의 암호 (Java) 본문

코딩테스트/프로그래머스

[프로그래머스] 둘만의 암호 (Java)

개발자마이 2023. 2. 4. 02:39
반응형
 

프로그래머스

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

programmers.co.kr

새로 생긴 1단계 문제. 제시된 방식대로 구현하여 해결했으나 내 코드의 디테일이 아쉬웠다.

 

- 제시된 문자열 s를 char 배열로 변환함

- 배열 arr을 탐색하며 한 글자(arr[i])씩 조건에 맞게 증가시킴

- 먼저 1을 증가시키고(처음에 주어진 문자는 skip과 겹치지 않음), z를 넘어가는 경우  a로 변환 

- 문자가 skip 문자열에 포함된다면 계속 증가,  z를 넘어가는 경우 a로 변환

-  배열을 String으로 변환 후 반환

 

Note

- 로직 자체는 문제가 없으나 다른 사람이 제출한 내용을 보고나서 좀 더 깔끔하게 풀 수 있었다는 걸 알았다. while문을 잘 활용했더라면 z를 넘어갈 때 변환하는 로직 한 번으로 줄일 수 있었고, for문 하나를 더 줄일 수도 있었다 (실제 연산 횟수에는 차이가 없음).

class Solution {
    public String solution(String s, String skip, int index) {
        char[] arr = s.toCharArray();
        
        for(int i = 0; i < arr.length; i++){
            for(int j = 0; j < index; j++){
                arr[i] += 1;
                if(arr[i] > 'z'){
                    arr[i] = (char)(arr[i] - 26);    
                }
                while(skip.contains(Character.toString(arr[i]))){
                    arr[i] += 1;
                    if(arr[i] > 'z'){
                        arr[i] = (char)(arr[i] - 26);    
                    }
                }
            }
        }

        return new String(arr);
    }
}
반응형
Comments