-
시저암호알고리즘/프로그래머스 2020. 8. 12. 00:27
문제 :
시저 암호 - https://programmers.co.kr/learn/courses/30/lessons/12926 나의 해답
class Solution { public String solution(String s, int n) { String answer = ""; //97~122 a:z //65~90 : A.Z String[] arr = s.split(""); for(String str : arr){ if(str.equals(" ")){ answer += str; }else{ byte bytes = str.getBytes()[0]; int sum = bytes+ n; if(bytes <= 90 && bytes >= 65){ // 대문자 // 65~90 if(sum > 90){ answer += String.valueOf((char)((sum-90)+64)); }else{ answer += String.valueOf((char)(sum)); } }else{ // 97~122 if(sum > 122){ answer += String.valueOf((char)((sum-122)+96)); }else{ answer += String.valueOf((char)(sum)); } } } } return answer; } }
대문자는 : 65~90
소문자는 : 97~122 // byte
번거롭게 byte 쓰지말고 int로 형변환 해서 처리하는게 나은듯. // code=(int)s.charAt(i);
다른 사람 풀이중 26으로 나눠서 처리하는게 많았는데 훨씬 깔끔한것같다.
대소문자 판단은 Character.isLowerCase() isUpperCase() 사용해야겠다.
String caesar(String s, int n) { String result = ""; n = n % 26; for (int i = 0; i < s.length(); i++) { char ch = s.charAt(i); if (Character.isLowerCase(ch)) { ch = (char) ((ch - 'a' + n) % 26 + 'a'); } else if (Character.isUpperCase(ch)) { ch = (char) ((ch - 'A' + n) % 26 + 'A'); } result += ch; } return result; }
'알고리즘 > 프로그래머스' 카테고리의 다른 글
체육복 - 탐욕법 (0) 2020.08.20 [1차] 비밀지도 (0) 2020.08.20 완주하지 못한 선수 - Hash (0) 2020.08.11 같은 숫자는 싫어 (0) 2020.08.02 두 정수 사이의 합 구하기 (0) 2020.08.02