[프로그래머스, Java] 시저 암호

2025. 7. 15. 15:37·CodingTest/Programmers

사진을 클릭하면 해당 문제로 이동

❌풀이 1

class Solution {
    public String solution(String s, int n) {

        StringBuilder sb = new StringBuilder();

        for (char c : s.toCharArray()) {

            if (Character.isAlphabetic(c)) {
                if (Character.isLowerCase(c)) {
                    sb.append((c + n) % 'a');
                } else {
                    sb.append((c + n) % 'A');
                }
            } else {
                sb.append(c);
            }
        }

        return sb.toString();
    }
}

알파벳이 아니라 숫자로 나옴

💡풀이 2

class Solution {
    public String solution(String s, int n) {
        StringBuilder sb = new StringBuilder();

        for (char c : s.toCharArray()) {
            if (Character.isLetter(c)) {
            
                // 소문자면 'a', 대문자면 'A'를 기준점으로 설정
                char base = Character.isLowerCase(c) ? 'a' : 'A';
                
                // 문자를 n만큼 이동시키되, 알파벳 끝에서 처음으로 순환
                char answer = (char) ((c - base + n) % 26 + base);
                sb.append(answer);
                continue;
            }
            // 알파벳이 아닌 문자(공백, 특수문자)는 그대로 추가
            sb.append(c);
        }

        return sb.toString();
    }
}

📖새로 배운 부분

(char) ((c - base + n) % 26 + base) 로직을 단계별로 분석해보겠습니다.

1단계: c - base

문자를 0부터 25까지의 숫자로 변환합니다.

  • 소문자의 경우 base = 'a'이므로 'a' - 'a' = 0, 'b' - 'a' = 1, ..., 'z' - 'a' = 25
  • 대문자의 경우 base = 'A'이므로 'A' - 'A' = 0, 'B' - 'A' = 1, ..., 'Z' - 'A' = 25

2단계: + n

변환된 숫자에 이동할 거리 n을 더합니다.

  • 예: 'a'(0번째)에서 n=3만큼 이동하면 0 + 3 = 3

3단계: % 26

알파벳은 26개이므로 26으로 나눈 나머지를 구해 순환 처리합니다.

  • 예: 'z'(25번째)에서 n=3만큼 이동하면 (25 + 3) % 26 = 28 % 26 = 2
  • 이는 'c'에 해당하므로 z → a → b → c로 순환됩니다.

4단계: + base

다시 원래 문자 체계로 변환합니다.

  • 소문자: 2 + 'a' = 'c'
  • 대문자: 2 + 'A' = 'C'

5단계: (char)

정수 연산 결과를 char 타입으로 형변환합니다.

예시:

  • 'x'를 3만큼 이동: ('x' - 'a' + 3) % 26 + 'a' = (23 + 3) % 26 + 'a' = 0 + 'a' = 'a'
  • 'Y'를 5만큼 이동: ('Y' - 'A' + 5) % 26 + 'A' = (24 + 5) % 26 + 'A' = 3 + 'A' = 'D'

 

GitHub - okjunghyeon/Programmers_CodingTest: 프로그래머스 관련 코딩테스트 문제를 풀이한 저장소입니다.

프로그래머스 관련 코딩테스트 문제를 풀이한 저장소입니다. Contribute to okjunghyeon/Programmers_CodingTest development by creating an account on GitHub.

github.com

'CodingTest > Programmers' 카테고리의 다른 글

[프로그래머스, Java] 푸드 파이트 대회  (0) 2025.07.15
[프로그래머스, Java] 두 개 뽑아서 더하기  (0) 2025.07.15
[프로그래머스, Java] 가장 가까운 같은 글자  (0) 2025.07.15
[프로그래머스, Java] 최소직사각형  (0) 2025.07.13
[프로그래머스, Java] 이상한 문자 만들기  (1) 2025.07.13
'CodingTest/Programmers' 카테고리의 다른 글
  • [프로그래머스, Java] 푸드 파이트 대회
  • [프로그래머스, Java] 두 개 뽑아서 더하기
  • [프로그래머스, Java] 가장 가까운 같은 글자
  • [프로그래머스, Java] 최소직사각형
devoks
devoks
꾸준히 작성해보자!
  • devoks
    ok's 개발 블로그
    devoks
  • 전체
    오늘
    어제
    • 분류 전체보기 (110) N
      • Backend (15)
        • SpringBoot (0)
        • Java (15)
      • Cs (17) N
      • Infra (0)
        • AWS (0)
        • Docker (0)
      • CodingTest (78)
        • Programmers (78)
  • 링크

    • My GitHub
  • 인기 글

  • 태그

    BufferedReader
    BufferedWriter
    StringTokenizer
    CS
    json
    java
    codingtest
    programmers
    effectivejava
    switch
  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
devoks
[프로그래머스, Java] 시저 암호
상단으로

티스토리툴바