[프로그래머스 - Level 1] 둘만의 암호 JavaScript

soo054141·2023년 2월 6일
0

algorithm

목록 보기
8/8
post-thumbnail

문제 링크

🔗 https://school.programmers.co.kr/learn/courses/30/lessons/155652#

나의 풀이(오답)

if(findSkipIdx) 에서 findSkipIdx가 0일 경우를 고려하지 않아 실수했다 !..
function solution(s, skip, index) {
    let alphabet = Array.from({length:26}, (v,i) => String.fromCharCode(i + 97));

    skip.split("").map((i) => {
        const findSkipIdx = alphabet.indexOf(i);
        if(findSkipIdx) alphabet.splice(findSkipIdx,1);
    })

    const result = s.split("").map((i)=>{
        const findSIdx = alphabet.indexOf(i);
        return alphabet[(findSIdx + index) % alphabet.length]
    })
    return result.join("")
}

다시 푼 풀이

1. Array.from과 fromCharCode를 이용해 소문자 알파벳이 든 alphabet 배열을 만든다.
2. alphabet에 skip할 문자를 미리 제거한다.
3. 문자열 s를 split으로 나누고 map으로 돌면서, alphabet에서 인덱스를 찾아 주어진 index만큼 더한다.(findSIdx)
4. 주어진 조건에 따라 (index를 더한 값 > alphabet의 길이 : 다시 alphabet[0]부터 시작)
alphabet.length로 나눈 나머지를 인덱스로, alphabet에서의 값을 리턴해준다.
5. result의 값은 배열이므로, result.join("")을 통해 문자열을 리턴한다.
function solution(s, skip, index) {
    let alphabet = Array.from({length:26}, (v,i) => String.fromCharCode(i + 97));

    skip.split("").map((i) => {
        const findSkipIdx = alphabet.indexOf(i);
        alphabet.splice(findSkipIdx,1);
    })

    const result = s.split("").map((i)=>{
        const findSIdx = alphabet.indexOf(i) + index;
        return alphabet[(findSIdx) % alphabet.length]
    })
    return result.join("")
}
profile
Front-end

0개의 댓글

Powered by GraphCDN, the GraphQL CDN