[18/07/05] 프로그래머스- Level 1 시저암호
시저 암호
어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 AB
는 1만큼 밀면 BC
가 되고, 3만큼 밀면 DE
가 됩니다. z
는 1만큼 밀면 a
가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.
제한 조건
- 공백은 아무리 밀어도 공백입니다.
- s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
- s의 길이는 8000이하입니다.
- n은 1 이상, 25이하인 자연수입니다.
입출력 예
s | n | result |
---|---|---|
AB | 1 | BC |
z | 1 | a |
a B z | 4 | e F d |
class Solution {
public String solution(String s, int n) {
int ascii[] = new int[s.length()];
char chars[] = new char[s.length()];
StringBuilder answer = new StringBuilder();
for (int i = 0; i < chars.length; i++) {
// String s에서 1문자씩 배열에 삽입한다.
chars[i] = s.charAt(i);
// 대문자일 경우
// ASCII 코드 기준 A=65, Z=90
if (chars[i] > 64 && chars[i] < 91) {
ascii[i] = chars[i] + n;
if (ascii[i] > 90) {
ascii[i] = ascii[i] - 26;
}
}
// 소문자일 경우
// ASCII 코드 기준 a==97, z=122else if (chars[i] > 96 && chars[i] < 123) {
ascii[i] = chars[i] + n;
if (ascii[i] > 122) {
ascii[i] = ascii[i] - 26;
}
}
// 공백일 경우
// ASCII 코드 기준 공백(space)= 32
else if (chars[i] == 32)
ascii[i] = 32;
// char를 StringBuilder로 합친다.
answer.append(Character.toString((char) ascii[i]));
}
return answer.toString();
}
}
ASCII코드를 배운적이 있어 접근 방법은 쉽게 떠올렸다. 그래서 ASCII코드표를 보면서 테스트케이스는 통과했는데 실제 케이스에서는 1개 맞고 다 틀렸다.....
이유는 우선 대문자일 경우 65+n으로 재설정을 해놨는데 이게 91을 넘어 갔을때를 생각을 못했다.
그래서 전부 다 수정한 후에 케이스를 통과할 수 있었다. ASCII코드가 이럴때 또 쓰임이 있다니. 배운건 인생에 있어서 꼭 한번은 써먹는거 같다.
확실히 저번에 공부한 StringBuilder로 하니 속도도 빠르다. 다른 사람의 풀이를 보니 isUpperCase, isLowerCase를 써서 대문자를 나눴는데 좋은 방법이라고 생각한다.
배운점
isUpperCase, isLowerCase 활용, ASCII코드
공부할 것
isUpperCase, isLowerCase 활용, ASCII코드
ASCII코드 기본적인 것들은 외우기(space, A, Z, a, z)
ASCII코드 기본적인 것들은 외우기(space, A, Z, a, z)
'Get IT Note > 알고리즘' 카테고리의 다른 글
[18/07/07] 프로그래머스- Level 1 약수의 합 (2) | 2018.07.07 |
---|---|
[18/07/06] 프로그래머스- Level 1 소수찾기 (0) | 2018.07.06 |
[18/07/05] 프로그래머스- Level 1 문자열을 정수로 바꾸기 (0) | 2018.07.05 |
[18/07/03] 프로그래머스- Level 1 수박수박수박수박수박수? (0) | 2018.07.04 |
[18/07/03] 프로그래머스- Level 1 서울에서 김서방 찾기 (0) | 2018.07.03 |