코딩테스트/Programmers

[프로그래머스] 시저 암호

grove1212 2025. 2. 26. 16:59
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));
    }
}