프로그래머스 - 시저 암호 - Java - 문자열

chaemin·2024년 4월 5일
0

프로그래머스

목록 보기
10/64

1. 문제

https://school.programmers.co.kr/tryouts/71852/challenges

2. 풀이

이 문제는 어떻게 char를 밀것인지가 관건이다.
따라서 알파벳의 마지막에 도달하면 다시 처음부터 시작하도록 설정해야한다.

  • offset은 들어온 문자열이 대문자 / 소문자인지에 따라 다름
  • position = 'a'나 'A'로부터 얼마나 차이가 나는지 확인. (즉 단순하게 a나 A를 0이라고 가정할때의 포지션 숫자를 대입해 주는 것.)
  • ('Z' - 'A' + 1)으로 마지막 도달 시 다시 처음부터 시작 가능하도록.
  • return (char) (offset + position);으로 'a'나 'A'로부터 밀린 알파벳이 무엇인지 구해준다.

▼핵심 코드

	public char push(char c, int n){
        if(!Character.isLetter(c)){
            return c;
        }
        
        int offset = Character.isUpperCase(c) ? 'A' : 'a';
        int position = c - offset;
        position = (position + n) % ('Z' - 'A' + 1);
        
        return (char) (offset + position);
    }

3. 전체코드

class Solution {
    public String solution(String s, int n) {
        StringBuilder sb = new StringBuilder();
        
        for(char c : s.toCharArray()) {
            sb.append(push(c, n));   
        }
        
        return sb.toString();
    }
    
    public char push(char c, int n){
        if(!Character.isLetter(c)){
            return c;
        }
        
        int offset = Character.isUpperCase(c) ? 'A' : 'a';
        int position = c - offset;
        position = (position + n) % ('Z' - 'A' + 1);
        
        return (char) (offset + position);
    }
}

0개의 댓글