본문 바로가기
Algorithm/프로그래머스 코딩테스트 문제풀이전략

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

by 미네구스 2024. 4. 16.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제풀이 접근

1. 문자열을 순회하면서 공백인 경우, 결과값에 공백을 그대로 더해준다

2. 문자열을 lowercase로 전부 변환하고, 임시값을 저장한다.

3. 문자열에 n만큼 밀었을 때, 'z'보다 크다면 26만큼 빼준다.

4. 만약에 기존 문자열이 대문자라면, 'a'를 더한 값을 대문자로 변환해준다.

class Solution {
    public String solution(String s, int n) {
        String answer = "";
        
        for(int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == ' ') {
                answer += " ";
                continue;
            }
            char c = s.charAt(i);
            char lower = Character.toLowerCase(c);
           
            // 더했을때 알파벳이 'z'를 넘어가는 경우
            int check = lower + n - 'a';
            if (check >= 26) {
                check -= 26;
            }
            
            if (Character.isUpperCase(c)) {
               answer += Character.toUpperCase((char) (check + 'a'));
            }
            else answer += (char) (check + 'a');
        }
        return answer;
    }
}

 

문제풀이 회고

나는 대문자일때 소문자로 변환하고 나중에 다시 변환해주는 방법을 택했는데, 다른 사람 코드를 보면 % 연산을 이용해서 계산하기도 해서 이 점을 염두해 둬야겠다.