-
문제 설명
S사에서는 각 부서에 필요한 물품을 지원해 주기 위해 부서별로 물품을 구매하는데 필요한 금액을 조사했습니다. 그러나, 전체 예산이 정해져 있기 때문에 모든 부서의 물품을 구매해 줄 수는 없습니다. 그래서 최대한 많은 부서의 물품을 구매해 줄 수 있도록 하려고 합니다.
물품을 구매해 줄 때는 각 부서가 신청한 금액만큼을 모두 지원해 줘야 합니다. 예를 들어 1,000원을 신청한 부서에는 정확히 1,000원을 지원해야 하며, 1,000원보다 적은 금액을 지원해 줄 수는 없습니다.
부서별로 신청한 금액이 들어있는 배열 d와 예산 budget이 매개변수로 주어질 때, 최대 몇 개의 부서에 물품을 지원할 수 있는지 return 하도록 solution 함수를 완성해주세요.네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다.
- 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 공백(" ) 또는벽(#") 두 종류로 이루어져 있다.
- 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 지도 1과 지도 2라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다.
- 지도 1과 지도 2는 각각 정수 배열로 암호화되어 있다.
- 암호화된 배열은 지도의 각 가로줄에서 벽 부분을 1, 공백 부분을 0으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다.
네오가 프로도의 비상금을 손에 넣을 수 있도록, 비밀지도의 암호를 해독하는 작업을 도와줄 프로그램을 작성하라.
입력 형식
입력으로 지도의 한 변 크기 n 과 2개의 정수 배열 arr1, arr2가 들어온다.
- 1 ≦ n ≦ 16
- arr1, arr2는 길이 n인 정수 배열로 주어진다.
- 정수 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n 이하이다. 즉, 0 ≦ x ≦ 2n - 1을 만족한다.
출력 형식
원래의 비밀지도를 해독하여 '#', 공백으로 구성된 문자열 배열로 출력하라.
입출력 예
문제 풀이
function solution(n, arr1, arr2) { const arrBinaryNumber1 = arr1.map(value => value.toString(2)); const arrBinaryNumber2 = arr2.map(value => value.toString(2)); const answer = arrBinaryNumber1.map((value, i) => { let string = String(Number(value) + Number(arrBinaryNumber2[i])); return ("0".repeat(n - string.length) + string) .split("") .map(num => num === "0" ? " " : "#") .join(""); }) return answer; }
풀이입니다.
매개변수 배열 arr1과 arr2를 각각 map()과 toString(2)를 이용해 2진수로 변화시킨 배열을 만들어주고
그중 하나에 map() 을 또 사용하여 string이라는 변수에 Number(value) + Number(arrBinaryNumber2[i]) 값을
String()으로 문자열로 변경해주고 변한 문자열에서 빈자리를 0 으로 채워주어야 하기때문에
repeat을 이용하여 0을 채워줍니다.
그 후에는 배열 안의 배열로 만들어주기위해 split("")을 사용해주고 다시 map()으로 각각을 0과 비교하여
" " or "#"를 넣어줍니다.
그 후에는 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; }
'코딩 기록 > 자바스크립트 알고리즘' 카테고리의 다른 글
(자바스크립트 알고리즘) 다트 게임 - kimyang-sun (0) 2020.10.18 (자바스크립트 알고리즘) 크레인 인형뽑기 게임 - kimyang-sun (0) 2020.10.16 (자바스크립트 알고리즘) 예산 - kimyang-sun (0) 2020.10.16 (자바스크립트 알고리즘) 실패율 - kimyang-sun (0) 2020.10.15 (자바스크립트 알고리즘) 체육복 - kimyang-sun (0) 2020.10.15 댓글