티스토리 뷰

문제

https://school.programmers.co.kr/learn/courses/30/lessons/12926

 

프로그래머스

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

programmers.co.kr

언어

자바 Java

로직

문자열 -> 문자 배열

char[] cArr = s.toCharArray();

공백 처리

현재 문자가 공백일 경우 반환할 문자열에 그대로 붙여줍니다.

if(!Character.isAlphabetic(c))
    sb.append(" ");

문자 추가하기

ascii에는 현재 문자에서 n만큼 이동한 아스키코드 값이 저장되어 있습니다. 즉 문자가 아닌 아스키코드 값이 들어갈 수도 있겠죠. 그렇기 때문에 n만큼 이동한 아스키코드 값이 알파벳인지 체크할 필요가 있습니다. 

아스키코드 값이 문자가 아닌 경우 26을 빼줍니다. 알파벳 개수가 총 26개이기 때문에 26을 빼주면 다시 알파벳이 될 수 있기 때문입니다.

if(c >= 'a' && c <= 'z') {
    int ascii = (int)c + n;
    if(ascii > 'z') {
        ascii -= 26;
    }
    sb.append((char)ascii);
} else if(c >= 'A' && c <= 'Z') {
    int ascii = (int) c + n;
    if(ascii > 'Z') {
        ascii -= 26;
    }
    sb.append((char)ascii);
}

코드

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

        char[] cArr = s.toCharArray();
        for(char c : cArr) {
            if(!Character.isAlphabetic(c))
                sb.append(" ");
            else {
                if(c >= 'a' && c <= 'z') {
                    int ascii = (int)c + n;
                    if(ascii > 'z') {
                        ascii -= 26;
                    }
                    sb.append((char)ascii);
                } else if(c >= 'A' && c <= 'Z') {
                    int ascii = (int) c + n;
                    if(ascii > 'Z') {
                        ascii -= 26;
                    }
                    sb.append((char)ascii);
                }
            }
        }
        return sb.toString();
    }
}

리팩토링

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

        char[] cArr = s.toCharArray();
        for (char c : cArr) {
            if (!Character.isAlphabetic(c))
                sb.append(" ");
            else {
                int ascii = Character.isUpperCase(c) ? 'A' : 'a';
                int pos = c - ascii;
                pos = (pos + n) % 26;
                ascii += pos;
                sb.append((char)ascii);
            }
        }
        return sb.toString();
    }
}
Total
Today
Yesterday
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30