[ Programmers ] 시저 암호 (Java)

ma.caron_g·2021년 10월 5일
0

Lv.1 - Programmers (완성)

목록 보기
37/74
post-thumbnail

1. Problem 📃

[ 시저암호 ]

https://programmers.co.kr/learn/courses/30/lessons/12926

2. Constraint 🔗


3. Solution 🔑

  1. 입력 받은 문자열을 한 문자씩 나누어 소문자인지 대문자인지 확인.
  2. n이 알파벳 갯수를 넘을 수 있으므로 n을 % 26을 해, 원 위치에서 몇 번째 더 이동해야하는지 파악.
  3. 본인이 입력 받은 문자에 따라 아스키코드 - 'a' % 26을 하면 해당 알파벳이 몇 번째 알파벳인지 파악 가능.
  4. 나온 문자들을 하나씩 정답에 담아주고 리턴.
    (다른 문제들을 풀고 벨로그를 작성해보니, 한 번씩 더해주면서 담기보다 StringBuilder를 사용해서 담아주면 시간과 메모리를 조금 더 절약 할 수 있다고 본다.)

4. Code 💻

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;
    }
}

5. Growth 🍄

String 클래스는 다른 문자를 더해주면 계속 새로운 객체를 생성하면서 시간과 메모리가 걸린다.

반면 StringBuilder 클래스는 새로운 객체를 생성하지 않고 기존에 있던 객체에 더해주는 클래스라 시간과 메모리를 절약 할 수 있다.

profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글