문제 풀이 (JAVA)
class Solution {
public String solution(String s, int n) {
char [] charr= s.toCharArray(); // 입력 문자열을 char 배열로 변환하여 저장.
char [] newcharr=new char[charr.length]; // 새로운 값을 저장할 char 배열 선언
char space=' '; // 공백문자 char 변수 선언
for(int i=0; i<charr.length; i++){
int pascii= (int)(charr[i]) + n; // 문자 char을 int로 변환하면 아스키코드가 되며, 아스키 코드 + 증가거리n 을 변수에 저장한다.
if(charr[i]==space){ // 문자가 공백이면 그대로 저장
newcharr[i]=space;
}
else if(pascii >90 && (int)charr[i] <97){ // 아스키코드 90=Z, 97=a 알파벳 대문자 Z:90을 초과할 경우 65:A로 돌아와 증가해야 하므로 대문자가 초과했을때의 경우
newcharr[i]=(char)(pascii -90 + 64); // 증가한아스키코드-90 = 추가로 증가해야할 거리 , 65= A로 다시 A부터 시작해야 하므로 +64 를 하면 증가한 대문자를 저장한다.
}
else if(pascii >122 && (int)charr[i]>96){ // 96보다 크다는것은 소문자 a가 96부터 시작하므로 소문자임을 판별하기 위한 조건, 122보다 크다는것은 Z보다 클 경우 증가 숫자를 다시 소문자 a로 하기 위하여 조건을 선언하였다.
newcharr[i]=(char)(pascii -122 + 96);
}
else{ // 증가한 거리가 기존 아스키코드의 범위를 벗어나지 않으면 증가한 아스키코드의 문자를 그대로 반영한다.
newcharr[i]=(char)(pascii);
}
}
String answer= new String(newcharr); // 문자배열을 문자열에 세팅
return answer;
}
}
주요 핵심 포인트
1. 대문자 A-Z 의 아스키코드표는 65~90 , 소문자 a-z의 아스키코드표는 97~122를 이용하였다.
2. char을 int로 변환할시 아스키코드 값으로 변환된다.
3. 대문자의 경우 증가한 숫자가 96을 초과할수 있으므로 조건을 걸어주지 않으면 오류가 난다.
4. 너무 어렵게 아스키코드를 사용하여 풀었다. 다른 사람의 소스를 참고해보니, 문자 ch 를 ch > 'a' , ch <'z' 와 같은 비교식을 사용하여 푸는 것이 훨씬 쉽다는 것을 알게 되었다.
5. String에 Char 배열을 넣어서 생성할수 있다는것을 알게 되었다.
6. 다음부터는 아스키코드가 아닌 ch 문자 논리를 사용하여 풀도록 해야겠다.
아스키코드표
다른 사람의 풀이
'프로그래머스(JAVA)' 카테고리의 다른 글
수박수박수박수박수? (0) | 2022.04.16 |
---|---|
문자열을 정수로 바꾸기 (0) | 2022.04.16 |
약수의 합 (0) | 2022.04.16 |
이상한 문자 만들기 (0) | 2022.04.16 |
자릿수 더하기 (0) | 2022.04.16 |