PCCP/프로그래머스
[프로그래머스 JAVA] 시저 암호
Life Log
2025. 5. 3. 23:36
728x90
반응형
문제 링크 👉 https://school.programmers.co.kr/learn/courses/30/lessons/12926
🔑 1. 문제 핵심 요약
주어진 문자열 s
의 각 알파벳 문자를 n
만큼 밀어 암호화하는 문제입니다.
대소문자는 따로 순환 처리해야 하고, 공백은 그대로 둬야 합니다.
⚠️ 2. 주의사항
- 공백
' '
은 변하지 않습니다. - 대문자 ↔ 대문자, 소문자 ↔ 소문자 → 따로 처리.
- 밀었을 때
'z'
를 넘으면'a'
,'Z'
를 넘으면'A'
로 돌아가야 함. Character
클래스 사용 →isUpperCase
,isLowerCase
로 깔끔한 분기 가능.
🛠️ 3. 슈도코드
for 각 문자 c in 문자열:
if c == ' ':
그대로 추가
else if c는 대문자:
'A' ~ 'Z' 범위에서 n만큼 밀고 순환
else if c는 소문자:
'a' ~ 'z' 범위에서 n만큼 밀고 순환
문자열 합쳐서 반환
💻 4. Character 클래스 사용 코드
class Solution {
public String solution(String s, int n) {
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
if (c == ' ') {
// 공백은 그대로
sb.append(c);
} else if (Character.isUpperCase(c)) {
// 대문자 처리
char shifted = (char) (c + n);
if (shifted > 'Z') {
shifted = (char) (shifted - 'Z' + 'A' - 1);
}
sb.append(shifted);
} else if (Character.isLowerCase(c)) {
// 소문자 처리
char shifted = (char) (c + n);
if (shifted > 'z') {
shifted = (char) (shifted - 'z' + 'a' - 1);
}
sb.append(shifted);
}
}
return sb.toString();
}
}
✅ 코드 핵심 설명
Character.isUpperCase(c)
→ 대문자 여부 확인Character.isLowerCase(c)
→ 소문자 여부 확인- 밀었을 때
'Z'
,'z'
초과 여부if
로 체크, 초과하면 앞쪽으로 순환 StringBuilder
로 문자열 합치기 → 성능 최적화
📣 마무리
Character
클래스는 자바에서 문자 분류 및 체크 작업을 훨씬 간단하게 만들어줍니다.
앞으로 문자열 문제 풀 때 적극적으로 활용해보세요!
728x90
반응형