프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이 문제는 꽤나 재미있게 풀었다.
퍼즐 푸는 것 같아서 재미있었던 문제!
나의 풀이
* 35.비밀지도
*정수 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n 이하이다. 즉, 0 ≦ x ≦ 2n - 1을 만족한다.
[pseudo code]
1. 0 ~ n 사이를 도는 루프 생성
- arr1과 arr2를 각각 a1, a2 배열로 받는데, 이때 각 원소를 2진법으로 변환한 뒤, 한자리씩 string으로 만들어 배열에 넣어주고, 그 배열을 뒤집기
- a1과 a2.의 길이가 n이 될때까지 "0"을 푸쉬
- (arr1[0] = 9 -> 2진수로 변환(1001) / arr1[0] => 11110 / 각 숫자를 2진수로 변환했을 때, 자릿수를 맞춰주기 위해서, 배열에 넣어 뒤집고, push로 0을 채워 줌)
- 빈 배열 temp를 생성하고, j를 도는 루프를 생성
- sum = a1과 a2의 각 자릿수를 더해줌 (a1과 a2의 요소는 string이므로, 숫자로 변환해서 더해줘야 함)
- 만약 sum > =1이면, 벽이므로, temp에 "#"을 푸쉬
- 아닌경우, " "(공백)을 푸쉬
2. j 루프를 탈출해서 temp 배열을 합치고, 해당 값을 answer에 푸쉬
3. answer 값 반환
function solution(n, arr1, arr2) {
let answer = [];
for (let i = 0; i < n; i++) {
let a1 = [...arr1[i].toString(2)].reverse();
let a2 = [...arr2[i].toString(2)].reverse();
while (a1.length < n) a1.push("0");
while (a2.length < n) a2.push("0");
let temp = [];
for (let j = n - 1; j >= 0; j--) {
let sum = +a1[j] + +a2[j];
if (sum >= 1) temp.push("#");
else temp.push(" ");
}
answer.push(temp.join(""));
}
return answer;
}
console.log(solution(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28]));
// ["#####","# # #", "### #", "# ##", "#####"]
console.log(solution(6, [46, 33, 33, 22, 31, 50], [27, 56, 19, 14, 14, 10]));
// ["######", "### #", "## ##", " #### ", " #####", "### # "]
'항해99_10기 > [2주차] 알고리즘 문제풀이' 카테고리의 다른 글
[36번] [상] 키패드 누르기 (미완) (0) | 2022.11.25 |
---|---|
[33번] [중상] 체육복 (미완) (0) | 2022.11.25 |
[34번][중상] 폰켓몬 (0) | 2022.11.25 |
[32번][중상] 실패율 (0) | 2022.11.25 |
[30번][중급] 나머지가 1이 되는 수 찾기 (0) | 2022.11.23 |