본문 바로가기
Algorithm/Problem_프로그래머스

프로그래머스(수박수박수박수박수박수?, 문자열을 정수로 바꾸기, 시저 암호) - Java

by uyoo 2020. 5. 25.

[수박수박수?]

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

 

코딩테스트 연습 - 수박수박수박수박수박수?

길이가 n이고, 수박수박수박수....와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 수박수박을 리턴하고 3이라면 수박수를 리턴하면 됩니다. 제한 조��

programmers.co.kr

 

* 로직

  • 1부터 n까지 진행하면서
    • 홀수 -> "수"
    • 짝수 -> "박"

 

class Solution {
    public String solution(int n) {
        String answer = "";
        StringBuilder sb = new StringBuilder();
        int i=1;
        while (i <= n) {
            if(i%2 == 0) sb.append("박");
            else sb.append("수");
            i++;
        }

        return answer = sb.toString();
    }
}

 

 

[문자열을 정수로 바꾸기]

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

 

코딩테스트 연습 - 문자열을 정수로 바꾸기

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요. 제한 조건 s의 길이는 1 이상 5이하입니다. s의 맨앞에는 부호(+, -)가 올 수 있습니다. s는 부호와 숫자로만 이루어져있습니

programmers.co.kr

 

* 로직

  • parseInt를 통해 정수로 바꾼다

 

class Solution {
    public int solution(String s) {
        int answer = 0;
        return answer = Integer.parseInt(s);
    }
}

 

 

[시저 암호]

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

 

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

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

programmers.co.kr

 

* 로직

  • 문자열 길이만큼 탐색하면서
  • 현재 글자가 공백이면 공백을 추가
  • 현재 문자가 대문자이면서 (현재 문자 + n만큼 증가) 값이 Z를 넘어가는 경우 -> 사이클을 돌린 값 추가
  • 현재 문자가 소문자이면서 (현재 문자 + n만큼 증가) 값이 z를 넘어가는 경우 -> 사이클을 돌린 값 추가
  • 위 3가지 조건을 벗어난다면 (현재 문자 + n만큼 증가)한 값을 추가

 

class Solution {
    public String solution(String s, int n) {
        String answer = "";
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<s.length(); ++i) {
            char ch = s.charAt(i);
            if(ch == ' ') {
                sb.append(ch);
                continue;
            }

            int idx_origin = (int) ch;
            int idx = ch + n;

            // 현재 문자가 대문자인 상황에서 Z를 넘어가는 경우
            if(idx_origin < 97 && idx > 90) {
                idx = (idx_origin - 25) + (n-1);
                sb.append((char) idx);
            }

            // 현재 문자가 소문자인 상황에서 z를 넘어가는 경우
            else if(idx_origin >= 97 && idx > 122) {
                idx = (idx_origin - 25) + (n-1);
                sb.append((char)idx);
            }

            else sb.append((char) idx);
        }

        return answer = sb.toString();
    }
}