|
[제한사항]
- 공백은 아무리 밀어도 공백입니다.
- s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
- s의 길이는 8000이하입니다.
- n은 1 이상, 25이하인 자연수입니다.
[입출력 예]

추측)
아스키코드를 이용해 n만큼 이동시키면 될거 같다.
하지만 입출력 예 2에서 보시다시피 소문자 z에서 1 이동하면 소문자 a로 돌아가니 문자가 z,Z일 경우에는 다시 앞으로 돌아갈수 있게 25마다 처리를 적용해주는 부분이 있어야 할듯하다
소스코드)
* 1차) 성공 [메모리: 103 MB, 시간: 37.25 ms]
public String solution(String s, int n) {
String answer = "";
char[] charArr = s.toCharArray();
for(int i=0; i<charArr.length; i++){
if(charArr[i] == 32){ // 아스키코드 공백은 32
answer += " ";
continue;
}
int num = 0;
if(charArr[i] >= 97 ){ // 시작점이 소문자인 경우, 소문자a 97
num = charArr[i] + n;
if(num > 122){
num = 97 + ((num-97) % 26);
}
} else { // 시작점이 대문자인 경우, 대문자a 65
num = charArr[i] + n;
if(num > 90){
num = 65 + ((num-65) % 26);
}
}
char charChange = (char) num;
answer += charChange;
}
return answer;
}
리뷰)
단순히 돌리는 것 뿐만 아니라 문자의 시작점 또한 생각해봐야하는 문제였다.
왜냐하면 대문자에서 n이 32만 넘어가도 소문자 범위를 침범하게 되어서 이 문자의 시작점이 어딘지 모르게 되기 때문이다.
따라서 소문자인지 대문자인지의 시작점을 판별해 그 안에서 알파벳 숫자 개수인 26보다 n이 크게되면,
현재 문자의 숫자에서 n을 더한 후 시작점으로 되돌리기 위해 각각 대소문자의 시작점의 아스키코드를 빼준다.
그리고 나머지 숫자가 시작점에서 부터 넘어가야하는 숫자인데 이때도 26을 넘는 케이스는 26으로 나눈 나머지로 문자의 시작점에서 글자를 넘겨 의도한 문자를 출력한다.
'Coding Test > Algorithm' 카테고리의 다른 글
| Programmers] 가장 큰 수 (0) | 2023.01.16 |
|---|---|
| Programmers] 신규 아이디 추천 (0) | 2022.11.23 |
| Programmers] 소수 만들기 (0) | 2022.11.22 |
| Programmers] 숫자 문자열과 영단어 (0) | 2022.11.22 |
| Programmers] 문자열 내림차순으로 배치하기 (0) | 2022.11.22 |
