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

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 쭉쭉 올려야겠습니다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 프로그래머스 12912 두 정수 사이의 합 - java (2) | 2021.07.09 |
---|---|
[Programmers] 프로그래머스 1845 폰켓몬 - java (1) | 2021.07.01 |
[Programmers] 프로그래머스 42626 더 맵게 - java (0) | 2021.06.17 |
[Programmers] 프로그래머스 42587 프린터 - java (2) | 2021.06.13 |