Skip to content

Latest commit

 

History

History
112 lines (85 loc) · 4.06 KB

200913.md

File metadata and controls

112 lines (85 loc) · 4.06 KB

2020/09/13 알고리즘 공부 내용 정리 (연습문제 - 수박수박수박수박수박수?, 시저 암호)

풀이한 문제는 "프로그래머스"의 "연습 문제"로 진행 하였다. 일단 쉬운문제로 천천히 다시 시작해봐야지..

1. 수박수박수박수박수박수?

1.1 문제 설명

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

1.2 제한사항

  • n은 길이 10,000이하인 자연수입니다.

1.3 입출력 예

n return
3 "수박수"
3 "수박수박"

1.4 풀이 과정

주어지는 길이 숫자 n이 0보다 크면 일단 "수"글자를 세팅해주고 예외인 n=0일땐 빈 문자열을 반환하게 한다. n이 0보다 크므로 "수"글자가 세팅되어 있으므로 n에 대해 반복을 하면서 반복에 대한 인덱스가 짝수일때 "수"를 홀수일때 "박"글자를 계속 붙여주고 결과를 반환한다.

1.5 코드

class Solution {
    fun solution(n: Int): String {
        val su = ""
        val bak = ""
        var answer = ""
        
        if (n > 0) answer += su
        else return ""
        
        for (i in 1 until n) {
            if (i % 2 == 0) answer += su
            else answer += bak
        }
        return answer
    }
}

2. 시저 암호

2.1 문제 설명

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 AB는 1만큼 밀면 BC가 되고, 3만큼 밀면 DE가 됩니다. z는 1만큼 밀면 a가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

2.2 제한사항

  • 공백은 아무리 밀어도 공백입니다.
  • s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
  • s의 길이는 8000이하입니다.
  • n은 1 이상, 25이하인 자연수입니다.

2.3 입출력 예

s n return
"AB" 1 "BC"
"z" 1 "a"
"a B z" 4 "e F d"

2.4 풀이 과정

잘 알려진 아스키코드를 기반으로 작업 하면 중간에 있는 특수문자들로 인하여 사용하기가 곤란해진다. 어쩔수 없이 a부터 z까지 그리고 A부터 Z까지 세팅된 2개의 리스트 혹은 배열이 필요하다.

필요한 문자들이 있는 리스트를 세팅 해 주고 주어진 문자열을 char배열로 바꾼뒤 이터레이션하면서 각 문자에 대해 대문자일 경우와 소문자일 경우에 대해 n만큼 더해준다. 만약 n만큼 더했는데 대, 소문자 세팅된 배열의 크기 보다 크거나 같다면 배열의 크기만큼 빼 준다.

2.5 코드

class Solution {
    fun solution(s: String, n: Int): String {
        val upperChrs = mutableListOf<Char>()
        for (i in 'A'.toInt() .. 'Z'.toInt()) {
            upperChrs.add(i.toChar())
        }
        val lowerChrs = mutableListOf<Char>()
        for (i in 'a'.toInt() .. 'z'.toInt()) {
            lowerChrs.add(i.toChar())
        }
        
        var answer = ""
        val ary = s.toCharArray()
        for (ch in ary) {
            if (ch == ' ') answer += " "
            else if (ch >= 'A' && ch <= 'Z') {
                val index = upperChrs.indexOf(ch)
                if (index + n >= upperChrs.size) {
                    answer += upperChrs.get(index) + n - upperChrs.size
                } else {
                    answer += upperChrs.get(index) + n    
                }                
            }
            else {
                val index = lowerChrs.indexOf(ch)
                if (index + n >= lowerChrs.size) {
                    answer += lowerChrs.get(index) + n - lowerChrs.size
                } else {
                    answer += lowerChrs.get(index) + n
                }                
            }
        }
        return answer
    }
}