Algorithm/Java

프로그래머스 - 시저 암호 java

고고마코드 2022. 6. 27. 13:10
반응형
12926번 문제

코딩테스트 연습 - 시저 암호 | 프로그래머스 (programmers.co.kr)

 

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

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

programmers.co.kr


풀이

영어 알파벳은 대소문자 각각 26개 입니다.

즉 아무리 많은 값을 더하더라도 26이라는 범위 내에서 순환되어야 합니다.

 

알파벳의 아스키 코드 값은 'A' = 65 / 'a' = 90 입니다.

A에 1을 더하면 66을 반환하며 이를 char 로 변환하면 'B' 입니다.

 

위 두가지 성질을 활용해 공식을 만들 수 있습니다.

공식

1. 대문자일 경우

(ch - 'A' + n) % 26 + 'A'

2. 소문자일 경우

(ch - 'a' + n) % 26 + 'a'

 

주의할 점은 입력에는 소문자,대문자,공백으로 이루어져 있어서 공백이 들어갈 수 있다는 점입니다.

공백을 따로 조건 처리하거나 대소문자를 조건 처리 해야 합니다. 

 

public String solution(String s, int n) {
    StringBuilder sb = new StringBuilder();
    for(char ch : s.toCharArray()) {
        if(ch != ' ') {
            char a = Character.isLowerCase(ch) ? 'a' : 'A';
            ch = (char) ((ch - a + n) % 26 + a);
        }
        sb.append(ch);
    }

    return sb.toString();
}

boolean java.lang.Character.isLowerCase(char ch)

:  문자가 소문자인지 확인하여 소문자이면 true, 아니면 false 를 반환

 

✔ 테스트 케이스 실행 속도 : 평균 0.04ms / 최대 1.1ms

반응형