본문 바로가기
[개발] 코딩테스트/프로그래머스

[프로그래머스] [1차] 비밀지도 / Javascript

by hmmmm_ 2022. 5. 4.

[문제 바로가기] 

2018 KAKAO BLIND RECRUITMENT > [1차] 비밀지도 (Lv.1)

 

[ 문제 파악 ]

- 비트 연산자 중 OR를 사용하는 것이 핵심!

 

[ 적용한 풀이 ]

function solution(n, arr1, arr2) {
    var answer = [];
    
    for(let i = 0; i < n; i++){
        answer[i] = (arr1[i] | arr2[i]).toString(2).padStart(n, 0);
    }
    answer = answer.map(before2radix => {
        return before2radix.replace(/1/g,'#').replace(/0/g, ' ')
    })
    return answer;
}

 

[해결 과정 중 실수한 부분 / 잡담]

이렇게 간단한 문젠데 ㅠㅠ 

심지어 어제 책에서 비트 연산자를 본 상태라 반가웠다.

코테를 진행하면서 나의 문제점을 알았다. 성격급하니 아는것도 활용못한다. 아니 안다고 착각한다. (정말 고쳐야할 문제점)

 

1. 두 수를 OR로 먼저 연산을 하고 .toString(2)으로 해줘야함

- 각 배열별로 .toString(2)로 하고 하니 잘 되지 않음

- 반복하는 김에 각 배열의 요소별로 OR연산을 하고 toString 했더니 됌

왜? 🥲

 

2. 아는 함수도... 몰라 ㅠㅠ

- padStart(총 갯수, 채우고싶은수)

- replace(해당하는문자, 변경할문자)

 

padStart 첫번째 파라미터를 총 개수가 아니고 몇개를 넣을껀지로 착각했다.

replace 첫번째 파라미터는 정규표현식으로 쓰지 않으면 조건에 걸리는 가장 첫번째 문자를 바꿔줌. 

이런 부분도 습관처럼 replace를 정규표현식으로 쓰던게 있으니 그냥 문자 넣어도 괜찮겠지? 이런 식으로 생각했던 것 같다. 

 

3. 추가로 안 것

- repeat() 

비슷한 것엔 .repeat(반복 횟수)이 있는데 반복을 원하는 string이나 수만 가능하다.

- toString은 String.prototype.toString()Array.prototype.toString()으로 두가지가 있음.

 

결론 : 코테를 진행하면서 내 습관을 되돌아 볼 수 있어 좋다.

고치자 😎

댓글