ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 시저암호
    알고리즘/프로그래머스 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
Designed by Tistory.