난이도 : Level. 1
언어 : Javascript
출제 내역 : 2018 KAKAO BLIND RECRUITMENT
비밀지도
- 비밀지도를 해독해 '#' 과 공백으로 구성 된 문자열을 출력하자
function solution(n, arr1, arr2) {
const newArr = [];
for (let i = 0; i<n; i++) {
let length = 0
let mix = (arr1[i] | arr2[i])
let data = ''
각 지도배열에서 벽이 있는지 없는지를 판단하기 위해
2진법 비트연산을 해줍니다.
while (length < n) {
data = mix%2 + data
mix = parseInt(mix/2)
length++
}
다음 해당 수를 2진법으로 바꾸기 위해서 toString(2)를 써도 되지만
맨 앞에 0이 있으면 표시가 안되기 때문에
이렇게 나눠주는 방식을 선택해서 while 문을 돌렸습니다.
let changeNum = data.replace(/1/g,'#').replace(/0/g,' ')
newArr.push(changeNum)
}
return newArr;
}
마지막으로 해당 문자열을 조건에 맞게 변경해서
배열에 변경된 문자열을 넣어줍니다.
다트게임
- 다트게임 총 점수를 구하자
function solution(dartResult) {
let bonus = dartResult.split(/[0-9,*#]/).filter(el => el!=='');
let score = dartResult.split(/[A-Z,*#]/).filter(el => el!=='');
let option = dartResult.split(/[0-9]/).filter(el=>el!='').join()
.split(/[A-Z]/).join('').split(',');
const newArr = [];
먼저 정규표현식을 이용해, 점수 / 보너스 / 옵션을 따로 구해줍니다.
for (let i = 0; i<score.length; i++) {
if (bonus[i] === 'S') {
newArr.push(Number(score[i]))
} else if (bonus[i] === 'D') {
newArr.push(Number(score[i]) ** 2)
} else {
newArr.push(Number(score[i]) ** 3)
}
}
다음 점수와 보너스를 조합해 옵션이 조합 되기 전 점수를
newArr에 넣어줍니다.
for (let i = 0; i<newArr.length; i++) {
if (option[i] === '*') {
newArr[i] = newArr[i] * 2;
newArr[i-1] = newArr[i-1] * 2;
} else if (option[i] === '#') {
newArr[i] = newArr[i] * -1
} else {
newArr[i] = newArr[i]
}
}
return answer=newArr.reduce((a,b) => a+b)
}
마지막으로 옵션을 적용해 배열의 모든 합을 더해줍니다.