개발일지
20231201 - 프로그래머스/12926
YIS0707
2023. 12. 1. 10:20
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