다희의 코딩 성장일기

[프로그래머스] level1. 시저 암호 (자바 JAVA) 본문

Algorithm/프로그래머스

[프로그래머스] level1. 시저 암호 (자바 JAVA)

ilmiodiario 2021. 8. 20. 16:49

[ 문제 ]  [프로그래머스] level1. 시저 암호 (자바 JAVA)

 

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/12926

 

코딩테스트 연습 - 시저 암호

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀

programmers.co.kr


# 접근 방법 및 풀이 

 

  • 먼저 String s에서 대문자와 소문자를 구분해야한다. 알파벳은 A-Z, a-z 이렇게 대문자와 소문자로 구성되어있다.
  • 해당문자에서 n번 민다는 말은 예를들어 n이 4이면 A->B->C->D->가 된다는 의미이고, 마지막 Z에선 다시 A로 돌아가면 된다. 따라서 해당문자에서 n을 더하면 다음 문자가 나올것이다. 
  • A는 65고 n = 4를 더하면 69이다. 아스키코드 69는 E이다. 
  • 변수 word에 s.charAt(i)번째의 문자 + n을 해서 추가할 단어로 표현했다.
  • 여기서 중요한건 Z보다 값이 더 커지면 A부터 돌아가야하기 때문에 (word-'z'+'a'-1)로 구성했다.
  • 문자의 대소문자 구분은 Character.isLowerCase() 가 있다는걸 처음 알게되서 이걸 사용해서 풀었다.
  • 자세한건 코드참조

# 주의할 점 

 

  • 없음

 

JAVA 코드
class Solution {
    public String solution(String s, int n) {
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < s.length(); i++){
            char c = s.charAt(i);
            char word = (char)(c+n);
            if(c == ' '){
                sb.append(c);
                continue;
            }
            if(Character.isLowerCase(c)){
				word = (word >'z')? (char)(word-'z'+'a'-1) : word;
            }else{
				word = (word >'Z')? (char)(word-'Z'+'A'-1) : word;
            }
             sb.append(word);
        }
        return sb.toString();
    }
}

 

 

 

REVIEW

레벨 1중에 괜찮은 문제다!

Comments