![](https://blog.kakaocdn.net/dn/c12sjS/btrv4zdbCig/ZTGS6kj67fhP2Cu8S5LeW1/img.png)
Description
주어진 문자열을 k만큼 알파벳 배치를 rotate해서 암호화 하여 반환하는 문제입니다.
Original alphabet: abcdefghijklmnopqrstuvwxyz
Alphabet rotated +2: cdefghijklmnopqrstuvwxyzab
m -> o
i -> k
d -> f
d -> f
l -> n
e -> g
- -
O -> Q
u -> w
t -> v
z -> b
Solution 1. ASCII
public static String caesarCipher(String s, int k) {
k = k % 26;
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
if(Character.isLetter(c)){
int ascii = c+k;
if ((Character.isLowerCase(c) && !Character.isLetter(ascii))
|| (Character.isUpperCase(c) && !Character.isUpperCase(ascii))
) ascii -= 26;
sb.append((char)ascii);
}else{
sb.append(c);
}
}
return sb.toString();
}
문자가 아닐경우는 그냥 결과에쓰고 문자일경우 ascii코드에서 k만큼 더해서 오른쪽에 있는 문자를 사용하게 합니다. 각 문자를 벗어나는 케이스라면 -26(알파벳개수)를 해서 다시 a,A부터 시작하여 기록합니다.
Reference
Caesar Cipher | HackerRank
Encrypt a string by rotating the alphabets by a fixed value in the string.
www.hackerrank.com
'알고리즘 > HackerRank' 카테고리의 다른 글
[HackerLank] Grid Challenge - 문제풀이 (0) | 2022.03.16 |
---|---|
[HackerLank] Palindrome Index - 문제풀이 (2) | 2022.03.16 |
[HackerLank] Tower Breakers - 문제풀이 (0) | 2022.03.15 |
[HackerLank] Zig Zag Sequence - 문제풀이 (0) | 2022.03.15 |
[HackerLank] Flipping the Matrix - 문제풀이 (0) | 2022.03.15 |