https://programmers.co.kr/learn/courses/30/lessons/17681
function solution(n, arr1, arr2) {
var answer = [];
for (let i=0; i<n; i++){
let result = "";
let a = arr1[i].toString(2); // 2진법으로 변환
let b = arr2[i].toString(2);
for (let j=0; j<n; j++){
if(a % 10 === 1 || b % 10 ===1) result+="#";
else result+=" "; // 숫자를 10으로 나눈 나머지로 일의 자리부터 하나씩 추출
a = parseInt(a / 10); // a와 b를 10으로 나눈 몫으로 새롭게 할당
b = parseInt(b / 10);
}
result = result.split("").reverse().join("");
//split으로 문자열을 하나씩 쪼개고 reverse로 순서를 뒤집고 join으로 다시 하나로 연결
answer.push(result);
}
return answer;
}
거의 40분에 걸쳐서 코드를 작성하고 콘솔창에 출력해보니 배열의 요소들이 기대값과 앞뒤 순서가 뒤집힌 것을 확인했다. 문자열의 순서를 뒤집는 방법을 구글링해봤고, 자바스크립트에는 문자열을 거꾸로 출력해주는 메서드는 없기 때문에 split("")으로 한 문자열씩 요소로 가지는 배열로 바꾸고, reverse( )로 배열의 순서를 뒤집은 다음, join("")으로 다시 배열에서 문자열로 바꾸는 방법을 찾을 수 있었다.
function solution(n, arr1, arr2) {
let num1, num2, s;
let answer = [];
for (let i=0; i<n; i++){
num1 = arr1[i];
num2 = arr2[i];
s = '';
for (let j=0; j<n; j++){
s = (num1%2 + num2%2) ? '#'+s : ' '+s;
num1 = Math.floor(num1/2);
num2 = Math.floor(num2/2);
}
answer.push(s);
}
return answer;
}
나의 풀이와 기본적으로 비슷하지만 쓸데없이 2진수로 변환도 하지 않았고, 문자열끼리의 덧셈으로 순서가 뒤집히는 일도 없는 것을 확인할 수 있었다.
지금까지 매우 기초적인 알고리즘 문제풀이만 해봤기에 아직 구현력이 많이 부족하다는 것을 느꼈고 갈 길이 멀지만 틈나는대로 알고리즘 문제풀이에 도전해보려고 한다.