[Programmers] 암호 해독

그래도 해야지·2023년 4월 20일
0

Programmers

목록 보기
18/40
post-thumbnail

문제 설명
군 전략가 머쓱이는 전쟁 중 적군이 다음과 같은 암호 체계를 사용한다는 것을 알아냈습니다.
암호화된 문자열 cipher를 주고받습니다.
그 문자열에서 code의 배수 번째 글자만 진짜 암호입니다.
문자열 cipher와 정수 code가 매개변수로 주어질 때 해독된 암호 문자열을 return하도록 solution 함수를 완성해주세요.

🤔 해설 1

  • 배열의 값들이 code의 배수인 걸 알아내려면?!
i % code === 0
  • i-1을 해줘야 함!
    왜냐? 만약 4의 배수부터 시작하려면 index 3번째부터 시작을 해야하기때문
answer.push(arr[i-1])

✅ 답 1

function solution(cipher, code) {
    const arr = cipher.split('')
    const answer = [];
    for(let i = code; i <= arr.length; i++) {
        if(i % code === 0) {
            answer.push(arr[i-1])
        }
    }
    return answer.join('')
}

🤔 해설 2

  • 문자열에서 배열로 만드는 것이 아니라 바로 for문을 돌리는 방법도 있었다.

  • const는 안 되고, var로 하면 가능

    const로 선언된 변수는 할당된 이후엔 값이 변경될 수 없기때문!
    => const로 선언한 경우, answer변수에 값을 할당하는 것이 불가능해져서 런타임에러가 발생함
    var로 선언된 변수는 값을 여러번 할당할 수 있다.
    => var로 선언한 경우, answer변수에 값을 할당하는 것이 가능함

✅ 답 2

function solution(cipher, code) {
    var answer = '';
    
    for(let i = 1; i <= cipher.length; i++) {
        if(i % code === 0)
            answer = answer + cipher[i-1]
    }
    return answer;
}

🤔 해설 3

if문 없이 for문 내에서 i를 code의 배수만큼 증가해서 풀면 훨씬 깔끔하게 풀 수 있었다!

✅ 답 3

function solution(cipher, code) {
    var answer = '';    
    for(let i = code - 1; i < cipher.length; i += code) {
        answer += cipher[i]
    }
    return answer;
}

0개의 댓글