반응형
코딩테스트 암호 해독
문제 설명
출력 예시
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번째 부터 답을 잘 찾아 올 수 있게 만들었습니다.