https://school.programmers.co.kr/learn/courses/30/lessons/12926
1. 내 풀이
StringBuilder를 이용해 효율성을 잡았다.
아래 분의 풀이처럼 풀면 result += ~~ 할때마다 새로운 객체가 할당되어 메모리 낭비 & CPU 자원이 낭비될 수 있다. 이게 다 효율성에서 나중에 걸리니 미리미리 StringBuilder 사용하는 습관을 들여두는게 좋을 것 같다.
class Solution {
public String solution(String s, int n) {
char[] chars = s.toCharArray();
StringBuilder sb = new StringBuilder();
for(int i = 0; i<chars.length; i++) {
if(chars[i]>= 'a' && chars[i] <= 'z'){
chars[i] = (char)((char)(((chars[i] - 'a') + n) % 26) + (char)'a');
} else if(chars[i] >= 'A' && chars[i] <= 'Z'){
chars[i] = (char)((char)(((chars[i] - 'A') + n) % 26) +(char)'A');
}
}
return sb.append(chars).toString();
}
}
2. 다른 분 풀이
Character의 static 메소드로 isLowerCase, isUpperCase 라는 메소드가를 통해 풀었다. 이하 동일하다.
class Caesar {
String caesar(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;
}
public static void main(String[] args) {
Caesar c = new Caesar();
System.out.println("s는 'a B z', n은 4인 경우: " + c.caesar("a B z", 4));
}
}
'코딩테스트 > Programmers' 카테고리의 다른 글
[프로그래머스] 두 개 뽑아서 더하기 (0) | 2025.02.28 |
---|---|
[프로그래머스] 가장 가까운 같은 글자 (0) | 2025.02.26 |
[프로그래머스] 이상한 문자 만들기 (0) | 2025.02.26 |
[프로그래머스] 3진법 뒤집기 / 진법 변환 (0) | 2025.02.26 |
[프로그래머스] 같은 숫자는 싫어 (0) | 2025.02.25 |