알고리즘 공부/코딩테스트(프로그래머스)

[프로그래머스 Level 1] 시저 암호 (Java 자바)

yepppi 2023. 6. 19. 21:55
반응형
SMALL

이제서야 시작해보는 코테 준비 ,, 아자자

요즘 새롭게 벌인 일들이 좀 있는데 다 잘해보려고 노력 중이다

지치지 말자 :) 

 

 

프로그래머스 <시저 암호> 문제 보기

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

프로그래머스 <시저 암호> 문제 풀이

class Solution {
    public String solution(String s, int n) {
        String answer = "";
        
        for(int i=0; i<s.length(); i++){
            char check = s.charAt(i);
            
            if(check == ' '){
                answer += " ";
                continue;
            }
            
            char next = (char)((int)check + n);
            
            if(65 <= check && check <= 90){
                if(next > 90) next -= 26;
            }
            
            if(97 <= check && check <= 122){
                if(next > 122) next -= 26;
            }
            
            answer += String.valueOf(next);
        }
        return answer;
    }
}

 

  • 문자열 s를 한 글자씩 char 자료형의 check로 빼와서 계산하는 방식
  • 공백일 경우 그대로 공백을 붙여줌
  • check에 n만큼 더한 next 변수를 만들어줌
  • check가 대문자인지 소문자인지 구분한 후, next 변수의 값이 그 범위 벗어나는 거 체크
    • 예를 들어, z 에 1이 더해지면 a 가 되어야 함 -> 이 부분 체크

 

 

개인적으로 내 풀이를 보고 스스로에게 아쉬웠던 점

  • 알파벳이 26글자임을 알면서 나머지 계산할 생각을 하다가 중간에 포기했다는 것
  • char 문자로 비교 구문을 사용하지 않고 아스키 코드를 대신 가져왔다는 것

 

 

 

다른 풀이

class Caesar {
    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;
    }

    public static void main(String[] args) {
        Caesar c = new Caesar();
        System.out.println("s는 'a B z', n은 4인 경우: " + c.caesar("a B z", 4));
    }
}
  • Character의 isLowerCase(), isUpperCase() 함수를 사용해서 대소문자 판별
  • 26 나머지 계산을 하기 위해 시작점만큼 빼주었다가 이후에 다시 더해주는 방식
    • 소문자에서는 'a'를 빼주었다가 다시 더해줌
    • 대문자에서는 'A'를 빼주었다가 다시 더해줌

 

 

 

회사 다닌다고 안주해서 코딩테스트에 굉장히x9999 소홀해져 있었는데 그동안 머리가 많이 굳은 느낌이다...

다시 불태워야지 ㅠ 🔥

반응형
LIST