https://programmers.co.kr/learn/courses/30/lessons/12926
- 입력 받은 문자열을 한 문자씩 나누어 소문자인지 대문자인지 확인.
- n이 알파벳 갯수를 넘을 수 있으므로 n을 % 26을 해, 원 위치에서 몇 번째 더 이동해야하는지 파악.
- 본인이 입력 받은 문자에 따라 아스키코드 - 'a' % 26을 하면 해당 알파벳이 몇 번째 알파벳인지 파악 가능.
- 나온 문자들을 하나씩 정답에 담아주고 리턴.
(다른 문제들을 풀고 벨로그를 작성해보니, 한 번씩 더해주면서 담기보다 StringBuilder를 사용해서 담아주면 시간과 메모리를 조금 더 절약 할 수 있다고 본다.)
class Solution {
public String solution(String s, int n) {
String result = "";
n = n % 26;
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (Character.isLowerCase(ch)) {
ch = (char) ((ch - 'a' + n) % 26 + 'a');
}
else if (Character.isUpperCase(ch)) {
ch = (char) ((ch - 'A' + n) % 26 + 'A');
}
result += ch;
}
return result;
}
}
String 클래스는 다른 문자를 더해주면 계속 새로운 객체를 생성하면서 시간과 메모리가 걸린다.
반면 StringBuilder 클래스는 새로운 객체를 생성하지 않고 기존에 있던 객체에 더해주는 클래스라 시간과 메모리를 절약 할 수 있다.