반응형
문제 제목 : 비밀지도 (2018 카카오 신입 공채 1차)
문제 유형 : 완전 탐색, 이진법
출제 플랫폼 : Programers
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/17681
PesudoCode and Exception
// PesudoCode
1) arr1, arr2를 이진법으로 바꾸게 되면 길이가 다 다르므로 최대 길이를 확인한다.
2) '1011' , '110111'는 길이가 다르기 떄문에 거꾸로 하나씩 확인하며 길이가 다른부분은 0으로 생각한다.
3) 동일한 위치에 '1'이 한곳에만 있어도 새로운 맵에 표현해야 한다.
4) 양쪽에 '1'없는 곳에만 맵에 표현안한다는 조건문을 이용하여 map을 통해 변경한다.
내가 푼 답안
function solution(n, arr1, arr2) {
let len = (Math.max(...arr1, ...arr2)).toString(2).length
return arr1.map((_, idx) => {
let temp = '';
let one = arr1[idx].toString(2).split('').reverse()
let two = arr2[idx].toString(2).split('').reverse()
for(let i = 0; i < len; i++) {
if(one[i] !== '1' && two[i] !== '1') temp += ' '
else temp += '#'
}
return [...temp].reverse().join("");
})
}
다른 사람의 풀이
function solution(n, arr1, arr2) {
return arr1.map((v, i) => addZero(n, (v | arr2[i]).toString(2)).replace(/1|0/g, a => +a ? '#' : ' '));
}
const addZero = (n, s) => {
return '0'.repeat(n - s.length) + s;
}
배운점
1) 정규식 표현 중 /[0-9]/g를 이용하면 string 'sd10' 에서 '10'을 같이 찾을 수 없다('1', '0' 따로 찾음)
2) .toString() 사용하여 number가 담겨있는 string을 number type으로 바꿀 수 있고, 여러 진법으로도 변경가능
- (11).toString() // '11' 기본값은 10진법이다
- (11).toString(2) // '1011'
- (11).toString(8) // '13'
- (11).toString(10) // '11'반응형
'Algorithm' 카테고리의 다른 글
| [Python, 이분탐색] 백준 1072 게임 (1) | 2024.10.28 |
|---|---|
| Programsers JadenCase 문자열 만들기 - JavaScript (0) | 2022.10.14 |
| Programers 키패드 누르기 (2020 카카오 인턴십) - JavaScript (1) | 2022.09.23 |
| Programers 체육복 - JavaScript (0) | 2022.09.22 |
| Programers 로또의 최고 순위와 최저 순위 - JavaScript (1) | 2022.09.22 |
