코딩테스트

코딩테스트 암호 해독

김도현2 2023. 6. 10. 18:32
반응형

코딩테스트 암호 해독

 

문제 설명

 

출력 예시

 

 

cipher란 변수에서 code 배수 번째 글자만 출력하는 문제 입니다.

 

cipher = "ahdeglxlao"

code = 2

result = hello

 

이런 문제 느낌입니다.

 

 

let cipher = "dfjardstddetckdaccccdegk";
let code = 4;
var answer = '';

let len = Math.round(cipher.length / code);

for(let i=1; i<=len; i++){
    if([...cipher][i*code-1]){	//가끔 글자수가 오버되는 cipher가 있어서 undefined 회피용 조건문 
        answer += [...cipher][i*code-1];
    }
}

//attack

cipher글자수가 조금 오버되면 for문에서 오버로 반복하기 때문에 undefined를 불러올 수 있습니다.

그걸 피하기 위해 조건문을 걸어 true일 때만 answer에 값을 추가 시켜주면 false를 피할 수 있습니다!

 

i*code에서 -1을 해주는 이유는 펼침연산자를 이용하여 cipher를 펼쳤기 때문에

배열 인덱스는 0부터 시작한다는 점입니다.

 

하지만 이대로 사용하게 되면 문제가 생겨버립니다. 

바로 code가 1일 때 인덱스는 계속 0이 유지되어버려 답을 [...cipher][0]을 계속 반복시켜 틀린답이 됩니다.

1일경우에도 조건을 넣어 반복문을 조금 다르게 써줍니다.

 

 

let cipher = "dfjardstddetckdaccccdegk";
let code = 4;
var answer = '';

let len = Math.round(cipher.length / code);

if(code == 1){
    for(let i=0; i<len; i++){
        answer += [...cipher][i*code];
    }
} else {
    for(let i=1; i<=len; i++){
        if([...cipher][i*code-1]){
            answer += [...cipher][i*code-1];
        }
    }
}

//attack

이렇게 조건문을 넣어 code가 1일 때도 배열 0번째 부터 답을 잘 찾아 올 수 있게 만들었습니다.