1일 1코테 day 40 _ 시저암호

konut ko·2022년 9월 13일
0

문제

나의 풀이

unction solution(s, n) {
    let arr = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
    let arr2 = arr.map((i)=> i.toLowerCase() )
    let s1 = [...s]
    let s2 = []
    for(i=0; i<s1.length; i++){
        let p1 = arr.indexOf(s1[i])
        let p2 = arr2.indexOf(s1[i])
        if(p1 === -1 && p2 === -1){
            s2.push(' ')}
        else if(p2=== -1 && p1 !== -1 ){
            if (p1+n > 25){
                s2.push(arr[p1+n-26])
            }else { 
                s2.push(arr[p1+n]) }
        } else if (p1=== -1 && p2 !== -1){
            if (p2+n > 25){
                s2.push(arr2[p2+n-26])
            }else { 
                s2.push(arr2[p2+n])}
    }}
   return  s2.join("")
}
  • 갑자기 떠오른 아이디어인데
    인덱스를 찾을때
    (indexOf(arr[i])+n)%26 나머지를 인덱스로 하면 알파벳을 두 개 붙일 필요 없음!
function solution(s, n) {
    let arr = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
    let arr2 = arr.map((i)=> i.toLowerCase() )
    let s1 = [...s]
    let s2 = []
    for(i=0; i<s1.length; i++){
        let p1 = arr.indexOf(s1[i])
        let p2 = arr2.indexOf(s1[i])
        if(p1 === -1 && p2 === -1){
            s2.push(' ')}
        else if(p2=== -1 && p1 !== -1 ){
            if (p1+n > 25){
                s2.push(arr[(p1+n)%26]) // 고친부분
            }else { 
                s2.push(arr[p1+n]) }
        } else if (p1=== -1 && p2 !== -1){
            if (p2+n > 25){
                s2.push(arr2[(p2+n)%26]) // 고친부분
            }else { 
                s2.push(arr2[p2+n])}
  
    }}

   return  s2.join("")
    
}

넘의 풀이 1

넘의 풀이 2

조건을 잘 파악해서 똑똑하게 품
(조건 n이 25이하)

넘의 풀이 3 - zi12i님 풀이

출처
https://velog.io/@zi12i/프로그래머스-코딩테스트-연습-시저-암호-javascript

function solution(s, n) {
    let text = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ"
    let answer = ""
    for(let i = 0; i < s.length; i++){
        if(s[i] === " "){
            answer = answer + " "
        } else {
            let newIndex = text.indexOf(s[i]) + n
            answer = answer + text.charAt(newIndex)
        } 
    }return answer
}

.charAt(i)
문자열도 인덱스 0부터 시작하고 i번째에 있는 문자를 반환한다.

profile
보초딩코라 틀린 내용 있을 수도 있습니다. 댓글 지적 환영

1개의 댓글

comment-user-thumbnail
2022년 9월 13일

toLowerCase()!

답글 달기