고양이와 코딩
[프로그래머스] 1월16일 ~ 1월21일 본문
728x90
1월16일
행렬의 덧셈
내 풀이
function solution(arr1, arr2) {
const numRows = arr1.length;
const numCols = arr1[0].length;
const result = [];
for (let i = 0; i < numRows; i++){
const resultRows = [];
for (let j = 0; j < numCols; j++){
const sum = (arr1[i][j] + arr2[i][j]);
resultRows.push(sum);
}
result.push(resultRows);
}
return result;
}
다른 사람의 풀이
function sumMatrix(A,B){
return A.map((arr1, idx1) => arr1.map((val, idx2) => val+B[idx1][idx2]));
}
- A.map에서 첫 번째 행 arr1 = [1, 2]을 선택합니다.
- arr1.map에서 첫 번째 요소 val = 1에 대해 B[0][0]를 더합니다. 결과는 1 + 3이므로 첫 번째 결과 행의 첫 번째 요소는 4가 됩니다.
- 동일한 방식으로 arr1.map이 진행되고, 두 번째 요소도 더해져서 결과 행의 두 번째 요소가 결정됩니다.
- 이 과정을 모든 행과 모든 요소에 대해 반복하여 최종적으로 행렬 덧셈의 결과가 반환됩니다.
좀 더 복잡한 예시로 두 번째 입력인 A = [[1], [2]]와 B = [[3], [4]]를 사용해도 같은 방식으로 동작합니다. 함수는 각 위치의 값에 대해 A와 B의 값을 더해 새로운 행렬을 생성합니다.
직사각형 별찍기
내 풀이
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
const n = data.split(" ");
const a = Number(n[0]), b = Number(n[1]);
for(let i = 0; i < b; i++){
console.log("*".repeat(a));
}
});
최대공약수와 최소공배수
내 풀이
function solution(n, m) {
let result = [];
let mul = n * m;
let gcd = 0;
let lcm = 0;
while ( m !== 0){
const temp = m;
m = n % m;
n = temp;
}
gcd = n;
lcm = mul / gcd;
return [gcd, lcm];
}
다른 사람의 풀이
function gcdlcm(a, b) {
var r;
for(var ab= a*b;r = a % b;a = b, b = r){}
return [b, ab/b];
}
개발자 그만 둘래요...ㅠㅠ~~~
1월19일
3진법 뒤집기
내 풀이
function solution(n) {
let reversedBase3 = n.toString(3).split('').reverse().join('');
const result = parseInt(reversedBase3, 3);
return result;
}
parseInt() 함수의 두 번째 인수는 기수(진법)을 나타내기 때문에 여기에 3을 전달하여 3진법으로 해석하도록 지정 해 줄수 있습니다
1월20일
예산
내 풀이
function solution(d, budget) {
let sorted_d = d.sort((a, b) => a - b);
let count = 0;
let sum = 0;
let index = 0;
while (index < sorted_d.length) {
sum += sorted_d[index];
if (sum <= budget) {
count++;
}
index++;
}
return count;
}
처음엔 while문 안에 forEach를 사용했는데, 무한루프에 빠져버렸다
그냥 while문을 사용하고 index를 증가하는 방식으로 변경
for문이 성능은 제일 좋다고 한다 ㅎㅎ
function solution(d, budget) {
let sorted_d = d.sort((a, b) => a - b);
let count = 0;
let sum = 0;
for (let i = 0; i < sorted_d.length; i++) {
if (sum + sorted_d[i] <= budget) {
sum += sorted_d[i];
count++;
} else {
break;
}
}
return count;
}
1월21일
이상한 문자 만들기
문제가 잘 안풀린다면? 이 있다면 1트에 성공할수 없다는것이.. 학계의 정설
아무튼 이 문제에서 생각해야할건
- 문자열의 앞 뒤에 공백이 있는 경우
- 공백을 기준으로, 각 단어별 홀/짝 을 판단해야함 (문자열 전체 0,1,2,3,.. 을 세는게 아님)
function solution(s) {
let isEvenIndex = true;
let result = [];
for (let i = 0; i < s.length; i++) {
if (s[i] === ' ') {
// 공백을 만나면 홀짝 기준 초기화
isEvenIndex = true;
result.push(' ');
} else {
result.push(isEvenIndex ? s[i].toUpperCase() : s[i].toLowerCase());
isEvenIndex = !isEvenIndex;
}
}
return result.join('');
}
'javascript' 카테고리의 다른 글
[프로그래머스] 2월3일 ~ 2월15일 (0) | 2024.02.03 |
---|---|
[리액트를 다루는 기술] data and hash arguments required 에러 해결 (0) | 2024.01.26 |
[프로그래머스] 1월8일 ~ 1월14일 (1) | 2024.01.08 |
[프로그래머스] 1월2일 ~ (0) | 2024.01.03 |
[프로그래머스] 12월26일 ~ 12월30일 (0) | 2023.12.26 |