문제
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
해결과정
처음에는 입력 받은 문자를 .toInt()를 사용하여 아스키 코드로 바꾼 후 n의 값을 더하고 다시 형변환을 시키는 과정을 생각했다. 하지만 문자 상태에서 정수를 더하면 굳이 형변환을 하지 않아도 아스키 코드를 증가 감소 시킬 수 있단 것을 알게 되었고 s를 한글자 한글지 분리 한 후 한글자씩 암호문을 만들어 다시 조합하는 식의 방법을 택했다.
코드
class Solution {
fun solution(s: String, n: Int): String {
var array = s.toCharArray()
var answer = ""
for(i in 0 until array.size){
var a = array[i]
if(a + n > 'z') answer += a + n - 26
else if (a + n > 'Z' && a + n <= 'Z' + n ) answer += a + n - 26
else if (a == ' ') answer += ' '
else answer += a + n
}
return answer
}
}
리뷰
String 자료형에 정수를 더하거나 빼면 아스키 코드가 변한다는 것을 몰라 초반 조금 헤맸다. if 조건식을 만드는 중에 대문자 부분에서 암호문으로 변경 했을 때 Z를 넘어가는 경우의 조건식에서 조금 헤매었다. 프로그래머스 테스트케이스 1,2,3은 통과 했지만 제출 시 6, 7, 8, 12번이 넘어가지 않아 조건식을 잘 못 설정한 것을 알았다. 해당 부분을 해결하기 위해 아스키 코드 표를 보며 다시 작성하였다.
'Android > Algorithm' 카테고리의 다른 글
[프로그래머스 / Kotlin] 콜라츠 추측 (0) | 2024.03.06 |
---|---|
[프로그래머스 / kotlin] 두 정수 사이의 합 (0) | 2024.03.06 |
[프로그래머스 / Kotlin] 하샤드 수 (1) | 2024.03.05 |
[프로그래머스/Kotlin] 최소 직사각형 (0) | 2024.02.28 |
[kotlin] 크기가 작은 부분 문자열 (0) | 2024.02.26 |