-
[프로그래머스] [1차] 비밀지도 - javascript기타/코딩테스트 2022. 6. 21. 12:51
문제
1. _n : 정사각형의 한 변의 길이
2. 지도에는 공백 " "(0) 또는 벽 "#"(1) 이 표시되어 있음
3. 전체 지도는 지도 1과 지도 2를 겹쳐서 얻을 수 있음
4. 지도 1과 지도 2중 "#"이 있는 칸은 전체 지도에서 벽(#)
5. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서 공백( )
6. 1 = #, 0 = ' '나의 풀이
function solution(_n, _arr1, _arr2) { const answer = []; for (let i = 0; i < _n; i++) { const map1 = _arr1[i].toString(2).padStart(_n, "0"); const map2 = _arr2[i].toString(2).padStart(_n, "0"); const map = [map1, map2]; let numChar = []; for (let j = 0; j < _n; j++) { if (map[0][j] == 1 || map[1][j] == 1) { numChar.push("#"); } else { numChar.push(" "); } } answer.push(numChar.join("")); } return answer; }
10진수 숫자를 toString(2)로 2진수로 변환했다.
그랬더니 아래와 같이 맨 앞자리의 0이 빠진 결과가 나왔다.
9 : 1001 20 : 10100 28 : 11100 18 : 10010 11 : 1011
그래서 padStart라는 함수를 이용해 _n의 개수만큼 앞에 0으로 채웠고, 아래의 결과를 도출했다.
9 : 01001 20 : 10100 28 : 11100 18 : 10010 11 : 01011
지도1과 지도2의 각 결과값을 가지고 2차원 배열로 만들어서
for문을 돌렸고, 둘 중 하나라도 1일 경우 ('#')으로, 나머지는 공백(' ')으로 배열에 값을 넣었고,
이후 해당 배열을 join해서 한 문자열로 만들어 answer 배열에 push 해주어 원하는 결과를 만들 수 있었다.
실행 테스트
const n = 5; const arr1 = [9, 20, 28, 18, 11]; const arr2 = [30, 1, 21, 17, 28]; solution(n, arr1, arr2); // output => [ '#####', '# # #', '### #', '# ##', '#####' ]
'기타 > 코딩테스트' 카테고리의 다른 글
[프로그래머스] 오픈채팅방 - javascript (0) 2022.06.26 [프로그래머스] 없는 숫자 더하기 - javascript (0) 2022.06.22 [프로그래머스] 로또의 최고 순위와 최저 순위 - javascript (0) 2022.06.21 [프로그래머스] 키패드 누르기 - javascript (0) 2022.06.16 [프로그래머스] 숫자 문자열과 영단어 - javascript (0) 2022.06.14