본문 바로가기

개발일지

20231201 - 프로그래머스/12926

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

 

문제설명

주어진 문자열의 알파벳을 주어진 숫자만큼 밀어낸 결과를 출력하기

 

제한조건

공백은 밀어도 공백이다.

주어진 문자열은 대문자, 소문자, 공백으로 이루어져 있다.

문자열의 길이는 8000 이하

n은 1~25의 자연수

 

예시

알파벳 : "a B z"

숫자 : 4

결과 : "e F d"

 

풀이 과정

처음 문제를 보고 풀었을 때에는 for문을 통해 하나씩 가져온 알파벳들의 아스키코드를 단순히 n만큼 증가시키는 코드를 작성했다. 하지만 이렇게 풀 경우, ' Z ' 와 ' z '를 넘어가면서 알파벳이 아닌 값이 나오게 된다. 그래서 if문을 통해서 구간을 나눠주었다.

문자열은 알파벳 혹은 공백이고 n은 1~25의 자연수기 때문에 만약 n만큼 더한 아스키코드값이 알파벳의 범위를 벗어난다면 -26을 해서 다시 ' A ' 혹은 ' a '부터 시작하게 한다. 그 후 char 타입으로 변환 후 결과값에 더해준다.

그리고 공백일 경우 그냥 결과값에 더해주고 n을 더한 값이 알파벳이라면  타입 변환 후 결과값에 더해준다.

 

public class P12926 {
    public static void main(String[] args) {
        Solution sol = new Solution();
        String s = "a B z";
        int n = 4;

        String result = sol.solution(s,n);
        System.out.println(result); // "e F d"
    }
   static class Solution {
        public String solution(String s, int n) {
            String answer = "";
            for(int i=0; i<s.length(); i++){
                if((s.charAt(i)+n > 'Z' && s.charAt(i) < 'a')|| s.charAt(i)+n > 'z'){
                // n을 더한 값이 알파벳의 범위를 벗어났을 경우
                
                    answer += (char)(s.charAt(i) -26 +n);
                } else if (s.charAt(i) == ' '){
                // 공백일 경우
                
                    answer += s.charAt(i);
                } else{
                // 그 외 알파벳의 범위안에 있을 경우
                
                    answer += (char)(s.charAt(i)+n);
                }

            }
            return answer;
        }
    }
}

 

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