문제
https://school.programmers.co.kr/learn/courses/30/lessons/12926
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
1. 문자가 대소문자인지 체크하는 플래그를 둔다.
2. 소문자로 변환한다.
3. 문자와 n만큼 더한후 아스키 코드로 변환한다.
3. 아스키 코드가 'a' ~ 'z' 사이에 포함되면 그 값을 저장
4. 'z'를 넘어간다면 다시 'a' 부터 시작해야 하므로 26을 빼주고 값을 저장
5. 원래 문자가 대문자라면 대문자 변환 후 answer에 더하고, 소문자였다면 그냥 변환없이 더한다.
코드
import java.util.*;
import java.lang.*;
class Solution {
public String solution(String s, int n) {
String answer = "";
for(int i=0; i<s.length(); i++){
if(s.charAt(i)==' '){
answer+=" ";
}else{
boolean isUpperCase=Character.isUpperCase(s.charAt(i)); //대문자 확인
char c=Character.toLowerCase(s.charAt(i));
int aCode = c+n; //거리 밀기
if((char)aCode>='a' && (char)aCode<='z'){ //거리 밀었을 때 a~z 사이
c=(char)aCode;
}else{ //거리 밀었을 때z를 넘는 경우
aCode-=26;
c=(char)aCode;
}
if(isUpperCase){ //원래 대문자였다면 다시 대문자로 변환
answer+=Character.toUpperCase(c);
}else{
answer+=(c);
}
}
}
return answer;
}
}
다른사람 풀이 코드
class Solution {
public String solution(String s, int n) {
String answer = "";
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');
}
answer += ch;
}
return answer;
}
}
'Algorithm (PS) > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Level 1] [1차] 비밀지도(Java) (0) | 2023.08.26 |
---|---|
[프로그래머스 Level 1] 숫자 문자열과 영단어(Java) (0) | 2023.08.26 |
[프로그래머스 Level 1] 최소직사각형 (Java) (0) | 2023.08.24 |
[프로그래머스 Level 1] 크기가 작은 부분 문자열 (Java) (0) | 2023.08.24 |
[프로그래머스 Level 1] 삼총사 (Java) (0) | 2023.08.24 |