잡다한 배똥월드

728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 시저 암호

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀

programmers.co.kr

 

 

 

 

 

class Solution {
    
    var alphabet = arrayOf("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
    
    fun solution(s: String, n: Int): String {        
        
        var arr = s.chunked(1);
        var answer = Array(arr.size){" "};
        
        for (i in 0..arr.size - 1) {
            if (arr[i] == " ") continue;
            
            var position = alphabet.indexOf(arr[i]);
            if (position == -1) {
                var word = arr[i].toUpperCase();
                position = alphabet.indexOf(word);
                
                answer[i] = alphabet[func(position + n)].toLowerCase();
            } else {
                answer[i] = alphabet[func(position + n)];
            }
        }
        
        return answer.joinToString("");
    }
    
    fun func(num: Int): Int {
        var n = 0;
        if (num >= 26) n = num - 26 else n = num
        return n;
    }
}

 

테스트 1 통과 (21.58ms, 66.3MB)
테스트 2 통과 (21.49ms, 66.2MB)
테스트 3 통과 (21.28ms, 66.7MB)
테스트 4 통과 (29.02ms, 65.7MB)
테스트 5 통과 (25.28ms, 66.4MB)
테스트 6 통과 (26.19ms, 66.3MB)
테스트 7 통과 (21.73ms, 66.2MB)
테스트 8 통과 (22.64ms, 66MB)
테스트 9 통과 (21.39ms, 66.3MB)
테스트 10 통과 (22.76ms, 66.4MB)
테스트 11 통과 (23.57ms, 66MB)
테스트 12 통과 (21.94ms, 66.2MB)
테스트 13 통과 (28.62ms, 67.4MB)

 

 

 

 

 

for문 안의 if문의 숫자 계산은 비슷해서 비슷한 부분은 따로 함수 선언해서 만들었음.

그래서 소문자면 대문자로 바꿔서 alphabet 배열의 위치랑 파악한 후 다시 소문자로 변환

대문자는 그대로 위치만 이동

 

 

 

 

 

728x90

+ Recent posts