Algorithm/Programmers

[Programmers] 프로그래머스 12926 시저암호 - java

담크 2021. 7. 17. 15:30

이번 문제는 프로그래머스에서 연습문제로 있는 시저암호를 풀어봤습니다. 사실 어릴때부터 괜히 친구들과 암호편지 주고받고 수수깨끼로 된 암호풀고 이런걸 좋아해서 선택한 문제입니다 ㅎㅎ

문제를 보면

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

 

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

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

programmers.co.kr

 

이렇게 나와있습니다.

 


문제풀이

class Solution {
    public String solution(String s, int n) {
        String answer = "";
		char[] arr = s.toCharArray();
		
		for(int i = 0; i < s.length(); i++) {
			if(arr[i] == ' ') {			//1번 조건
				answer += " ";
			} else if(Character.isLowerCase(arr[i])) {	//2번 조건
				if(arr[i]+n > 'z') {
					answer += (char) (arr[i] + n -26);	//3번 조건
				} else {
					answer += (char) (arr[i] + n);
				}
			} else {
				if(arr[i] + n > 'Z') {
					answer += (char) (arr[i] + n - 26);
				} else {
					answer += (char) (arr[i] + n);
				}
			}
		}
		return answer;
	}
}

 

1. 우선 문제의 첫번째 제한조건에 의해 arr[i] == ' ' 즉 문자열에 공백이 있을 경우 answer에 그냥 " "를 추가합니다.

 

2. 그 다음 대문자는 대문자 소문자는 소문자 끼리 구분해야하므로 if 문 안에

Character.isLowerCase(arr[i])를 써서 구분해줍니다.

 

** isLowerCase는 boolean 타입으로 입력받은 인자가 영문 소문자인지 여부를 판단해 True, False값을 리턴합니다.

 

3. 그 다음 입출력 예 2번을 보면 a ~ z까지의 알파벳에서 만약 z를 넘을경우 다시 a로 돌아와 카운트 해줍니다.

(이 부분은 대문자와 소문자의 조건이 동일하므로 똑같이 써줬습니다.)

 

 

 

뭔가 처음에 문제를 봤을 때 신기해서 무턱대고 풀다가 초반에 좀 막히는 부분이 있었는데 제가 문제를 잘 안읽어서 그렇더라구요... ㅎㅎ 문제 잘 읽고 정신차리고 푸니까 로직도 간단히 나오고 문제 푸는데도 오래걸리지 않았던 문제였습니다. 확실히 level 1문제들은 로직만 잘 떠올리면 금방금방 풀 수 있는 문제들이 많은거같아요 앞으로 공부 더 빡시게 해서 level2, 3, 4 쭉쭉 올려야겠습니다.