< 문제 정보 >
[ 문제 ]
입력으로 문자열과 자연수가 들어오면, 알파벳을 해당 자연수만큼 밀어 다른 알파벳으로 바꾸는 암호화를 해보자.
[ 예시 ]
(1) 입력 : "AB", 1
- 출력 : "BC"
(2) 입력 : "z", 1
- 출력 : "a"
(3) 입력 : "a B z", 4
- 출력 : "e F d"[ 규칙 ]
(1) 문자열로 '공백', '소문자', '대문자'가 들어올 수 있다.
(2) 공백은 아무리 밀어도 공백이다.
(3) 문자열의 길이는 8000이하이다.
(4) 자연수는 1이상 25이하이다.[ 프로그래머스 ]
- Level 1 / Java
- 출처 : 프로그래머스 - https://programmers.co.kr/learn/courses/30/lessons/12926
< 풀이 >
- String형으로 들어온 문자열을 배열로 나누어 초기화한다.
- 들어온 배열의 문자열이 대문자, 소문자, 공백인지 구분한다.
- 각 인덱스의 문자열에 자연수를 더하고, 소문자일 경우 'z'를 넘는다면, 대문자일 경우 'Z'를 넘는다면 26을 빼 'a', 'A'부터 마저 계산하도록 한다.
[ 코드 ]
import java.util.Arrays; class Solution { public String solution(String s, int n) { String answer = ""; char[] arr= new char[s.length()]; for(int i=0;i<s.length();i++){ // String 문자열을 배열에 각각 초기화 arr[i]= s.charAt(i); } for(int i=0;i<s.length();i++) { if ((65<=arr[i])&&(arr[i]<=90)) { // 대문자일 경우 if (arr[i]+n<91){ // 계산 값이 'Z'를 넘지 않는 경우 answer+=(char)(arr[i]+n); // 계산 } else // 'Z'를 넘는 경우 answer+=(char)(arr[i]+n-26); // 'A'로 돌아와서 마저 계산 } /*65~90 대문자*/ else if ((97<=arr[i])&&(arr[i]<=122)) { // 소문자일 경우 if (arr[i]+n<123) // 'z'를 넘지 않는 경우 answer+=(char)(arr[i]+n); // 계산 else answer+=(char)(arr[i]+n-26); // 'z'를 넘는 경우 } /*97~122 소문자*/ else if (arr[i]==32) // 공백의 ASCII는 32이다. answer+=" "; } return answer; } }