https://school.programmers.co.kr/learn/courses/30/lessons/12926
정답
- 현재 문자가 대문자인지 소문자인지 판단하여 기준 문자를 설정
- 대문자일 경우 'A'(아스키코드 65), 소문자인 경우 'a'(아스키코드 97)
- 현재 문자의 위치를 기준 문자로부터의 상대적 위치로 변환한다.
- 'A' 또는 'a'를 0으로 두고, 이를 n만큼 이동시킨다.
- 이동된 값이 알파벳 범위 내에 있도록 26으로 나눈 나머지를 구한다.
- 다시 기준 문자를 더하여 올바른 아스키 코드 값을 얻는다.
class Solution {
public String solution(String s, int n) {
StringBuilder sb = new StringBuilder();
for(int i=0; i<s.length(); i++)
{
char cur = s.charAt(i);
//공백일 때
if(cur==' ')
{
sb.append(' ');
}
else
{
char base = Character.isUpperCase(cur)?'A':'a';
char shift = (char)((cur-base+n)%26+base);
sb.append(shift);
}
}
return sb.toString();
}
}
다른 사람의 풀이
1)
class Caesar {
String caesar(String s, int n) {
String result = "";
n = n % 26;
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (Character.isLowerCase(ch)) {
ch = (char) ((ch - 'a' + n) % 26 + 'a');
} else if (Character.isUpperCase(ch)) {
ch = (char) ((ch - 'A' + n) % 26 + 'A');
}
result += ch;
}
return result;
}
public static void main(String[] args) {
Caesar c = new Caesar();
System.out.println("s는 'a B z', n은 4인 경우: " + c.caesar("a B z", 4));
}
}
2)
class Caesar {
String caesar(String s, int n) {
String result = "";
int i, code;
for(i=0;i<s.length();i++) {
if(s.charAt(i)!= ' ') {
//System.out.println(s.charAt(i));
code=(int)s.charAt(i);
if (code >= 65 && code <=90) {
code=code+n;
if(code > 90) code=65+((code-91)%26);
} else if (code >= 97 && code <=122) {
code=code+n;
System.out.println(code);
if(code > 122) code=97+((code-123)%26);
}
result=result+Character.toString((char)code);
} else {
result=result+Character.toString(s.charAt(i));
}
}
return result;
}
public static void main(String[] args) {
Caesar c = new Caesar();
System.out.println("s는 'a B z', n은 4인 경우: " + c.caesar("a B z", 4));
}
}
3)
class Solution {
public String solution(String s, int n) {
String answer = "";
for(char ch : s.toCharArray()) {
if(ch==' ') {
answer += ch;
}else if(ch>='a'&& ch<='z'){
answer += (char)('a' + (ch+n-'a')%26);
}else {
answer += (char)('A' + (ch+n-'A')%26);
}
}
System.out.println(answer);
return answer;
}
}
'Java > 프로그래머스' 카테고리의 다른 글
[JAVA] 프로그래머스 - 숫자 문자열과 영단어 (0) | 2024.05.17 |
---|---|
[JAVA] 프로그래머스 - 나누어 떨어지는 숫자 배열 (0) | 2024.05.17 |
[JAVA] 프로그래머스 - 없는 숫자 더하기 (0) | 2024.05.17 |
[JAVA] 프로그래머스 - 음양 더하기 (0) | 2024.05.17 |
[JAVA] 프로그래머스 - 덧칠하기 (0) | 2024.05.16 |