Welcome! Everything is fine.

[프로그래머스/Lv.1] 시저 암호 - Java 본문

프로그래머스/Lv.1

[프로그래머스/Lv.1] 시저 암호 - Java

개발곰발 2024. 4. 9.
728x90

📌 문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

📌 풀이

이번 문제는 문자열 s를 한글자씩 돌면서 각 알파벳을 n만큼 미는 문제이다. 아스키코드를 이용하여 풀었다.

 

문자열을 돌면서 char 변수 result에 s.charAt(i) + n을 먼저 저장한 후, 소문자와 대문자를 나눠서 조건문을 작성하였다. 처음에는 소문자와 대문자를 구분하지 않아서 틀렸다. 문자열 연산이 많을 수 있으므로 StringBuilder로 result를 붙여나가도록 했다.

  • s.charAt(i)가 소문자일 경우
    • 알파벳 소문자는 아스키코드 97 ~ 122인 경우이다. Character.isLowerCase(s.charAt(i))로 처리해도 된다.
    • z(122)가 넘어갈 경우, result에서 26(122-96)을 뺀다. 
  • s.charAt(i)가 대문자일 경우
    • 알파벳 대문자는 아스키코드 65 ~ 90인 경우이다. Character.isUpperCase(s.charAt(i))로 처리해도 된다.
    • Z(90)이 넘어갈 경우, result에서 26(90-64)을 뺀다.
  • s.charAt(i)가 공백일 경우
    • StringBuilder에 공백을 붙인 뒤 다음 문자열로 넘어간다.

📌 아스키코드표

📌 전체 코드

class Solution {
    public String solution(String s, int n) {
        StringBuilder sb = new StringBuilder();
        
        for (int i = 0; i < s.length(); i++) {
            char result = (char) (s.charAt(i) + n);
            
            if (s.charAt(i) >= 97 && s.charAt(i) <= 122) {
                if (s.charAt(i) + n > 122) result -= 26;
            } else if (s.charAt(i) >= 65 && s.charAt(i) <= 90) {
                if (s.charAt(i) + n > 90) result -= 26;
            } else if (s.charAt(i) == ' ') {
                sb.append(' ');
                continue;
            }
            
            sb.append(result);
        }
        
        return sb.toString();
    }
}