728x90
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12926
📌 문제 개요
문자열의 각 알파벳을 일정 거리만큼 이동시키는 시저 암호 문제
- "AB" → 1칸 이동 → "BC"
- "z" → 1칸 이동 → "a"
처럼 알파벳 범위를 넘어가면 다시 처음으로 순환해야 한다.
또한 공백은 그대로 유지해야 한다.
📌 접근 방법
문자열을 한 글자씩 순회하면서 다음과 같이 처리했다.
- 공백이면 그대로 추가
- 대문자면 'A' ~ 'Z' 범위 기준 이동
- 소문자면 'a' ~ 'z' 범위 기준 이동
- % 26 연산으로 알파벳 순환 처리
문자열 연결은 StringBuilder를 사용
📌 핵심 아이디어
시저 암호 핵심 공식은 아래와 같다.
대문자 이동
(ch - 'A' + n) % 26 + 'A'
소문자 이동
(ch - 'a' + n) % 26 + 'a'
('Z' - 'A' + 1) % 26 + 'A'
(25 + 1) % 26
= 0
즉 다시 'A'로 순환된다.
📌 전체 코드
class Solution {
public String solution(String s, int n) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
// 공백 처리
if(ch == ' ') {
sb.append(' ');
}
// 대문자 처리
else if(ch >= 'A' && ch <= 'Z') {
ch = (char)((ch - 'A' + n) % 26 + 'A');
sb.append(ch);
}
// 소문자 처리
else if(ch >= 'a' && ch <= 'z') {
ch = (char)((ch - 'a' + n) % 26 + 'a');
sb.append(ch);
}
}
return sb.toString();
}
}
📌 정리
이 문제는 단순 문자열 구현 문제처럼 보이지만,
- 아스키코드
- 문자 연산
- 알파벳 순환 처리
개념을 이해하고 있는지 확인하는 문제
특히 % 26을 이용한 순환 처리 방식은 이후 문자열 문제에서도 자주 사용되는 패턴이라 익혀두면 좋다.
728x90
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
| 프로그래머스 푸드 파이트 대회 JAVA 풀이 (0) | 2026.05.27 |
|---|---|
| 프로그래머스 두 개 뽑아서 더하기 (JAVA) (0) | 2026.05.26 |
| 프로그래머스 가장 가까운 같은 글자 JAVA 풀이 (해시맵, 문자열) (0) | 2026.05.24 |
| 프로그래머스 3진법 뒤집기 (JAVA) (0) | 2026.05.22 |
| 프로그래머스 최소직사각형 (JAVA) (0) | 2026.05.22 |