고양이와 코딩
[프로그래머스] 11월7일 ~ 11월13일 본문
11월 7일
문자열 섞기
내 풀이
function solution(str1, str2) {
var answer = '';
for (let i = 0; i < str1.length; i++) {
answer += str1[i] + str2[i];
}
return answer;
}
다른 사람의 풀이
function solution(str1, str2) {
return [...str1].map((x, idx)=> x+str2[idx]).join("");
}
map 사용 좀 ~~~ 왤케 생각이 안나는지 ㅜㅜ ~~~
문자 리스트를 문자열로 변환하기
내 풀이
function solution(arr) {
return arr.join('');
}
join사용할때 구분자로 ''을 넣어줘야 빈 문자열로 연결되고 join()일케 아무것도 넣어주지 않으면 기본 구분자인 ','가 사용된다
문자열 곱하기
내 풀이
function solution(my_string, k) {
var answer = my_string.repeat(k);
return answer;
}
repeat 함수 까먹지 말기 ㅎㅎ
더 크게 합치기
내 풀이
function solution(a, b) {
const num_a = a.toString();
const num_b = b.toString();
var answer1 = num_a + num_b;
var answer2 = num_b + num_a;
if (answer1 >= answer2) {
return parseInt(answer1);
} else {
return parseInt(answer2);
}
}
조잡함 그 자체
다른 사람의 풀이
function solution(a, b) {
return Math.max(Number(`${a}${b}`), Number(`${b}${a}`))
}
어리..둥절?!! 똑똑하다...
두 수의 연산값 비교하기
내 풀이
function solution(a, b) {
var str_a = a.toString();
var str_b = b.toString();
var answer1 = str_a + str_b;
var answer2 = 2 * a * b;
const answer = Math.max(answer1, answer2)
return answer;
}
윗 문제랑 비슷하다!! 배운걸 조금 응용해봤다..(조금)
11월 8일
조건 문자열
처음에 그냥 if문으로 갖다 박아버리려다가.. 그래두 생각을 좀 더 해보자.. 하고
function solution(ineq, eq, n, m) {
var string = ineq + eq;
return (n string m == true ? 1 : 0);
}
뭐 이런식으로?? (틀린거 앎) <, = 문자열을 각각 합쳐서 판별할 순 없나? 했는데 안되고..(당연함;;;)
제출 코드
function solution(ineq, eq, n, m) {
if (eq === '=' && n === m) return 1
if (ineq === '<' && n < m) return 1
if (ineq === '>' && n > m) return 1
return 0
}
<=, >= 의 경우를 계산하면 if문이 너무 길어져서...
근데 문제가 좀 이해하기 어렵다??? 괜히.. !때문인가 ㅎㅎ 아님 내가 멍청해서??
11월 9일
코드 처리하기
네????
내 풀이
function solution(code) {
var ret = '';
var mode = 0;
for (let i = 0; i < code.length; i++) {
if (mode === 0) {
if (code[i] !== '1') {
if (i % 2 === 0) {
ret += code[i];
}
} else {
mode = 1;
}
} else if (mode === 1) {
if (code[i] !== '1') {
if (i % 2 !== 0) {
ret += code[i];
}
} else {
mode = 0;
}
}
}
return ret === '' ? 'EMPTY' : ret;
}
if문의 향연.....
등차수열의 특정한 항만 더하기
첫 번째 풀이
function solution(a, d, included) {
var array = [];
var sum = 0;
for (let i=0; i < included.length; i++){
array.push(a + i * d);
if (included[i] === true){
sum += array[i];
}
}
return sum;
}
통과는 하는데 시간도 너무 오래걸리고, 점수도 1점밖에 안준 코드 ㅎㅎ
reduce 함수를 사용해서 다시 풀어봤다
function solution(a, d, included) {
var array = Array.from({ length: included.length}, (_, i) => a + i * d);
const sum = included.reduce((acc, curr, index) => {
return curr ? acc + array[index] : acc;
}, 0)
return sum;
}
for문 없이 array도 Array.from 메서드를 사용해서 길이는 included길이로 설정하고, 무시할 값으로 '_'를 표시해주고, i는 인덱스를 나타낸다. 이렇게 하면 등차수열로 된 included 배열 길이와 같은 array가 생성된다.
그리고 reduce함수를 사용해서 매개변수로 acc, curr, index를 받는다.
acc는 누적 값을 나타내는 변수로, 초기값을 0으로 설정해주어야 제대로 작동한다!
curr은 현재 처리 중인 배열 요소의 값으로 included 배열의 각 요소를 순차적으로 받아온다. (반복문같은 역할)
index는 현재 처리 중인 배열 요소의 인덱스를 나타낸다.
curr가 true일때 현재 인덱스에 해당하는 array배열의 값을 acc에 더하고, 아니면 acc를 그대로 반환한다 !
살~짝 이해가 안돼서 지피티 설명 추가 ㅎㅎ
주사위 게임 2
내 풀이
function solution(a, b, c) {
var answer = 0;
if (a !== b && b !== c && a !== c) {
answer = a + b + c;
} else if (a === b && b === c) {
answer = (a + b + c) * (a ** 2 + b ** 2 + c ** 2) * (a ** 3 + b ** 3 + c ** 3);
} else {
answer = (a + b + c) * (a ** 2 + b ** 2 + c ** 2);
}
return answer;
}
더 좋은 방법이 생각나지 않는다
11월 10일
이어 붙인 수
내 풀이
function solution(num_list) {
var odd = '';
var even = '';
for (let i = 0; i < num_list.length; i++){
if(num_list[i] % 2 !== 0){
odd += num_list[i];
} else {
even += num_list[i];
}
}
return Number(odd) + Number(even);
}
마지막 두 원소
내 풀이
function solution(num_list) {
var last = num_list[num_list.length - 1];
var before = num_list[num_list.length - 2];
var result = (last > before) ? num_list.push(last - before) : num_list.push(last * 2);
return num_list;
}
수 조작하기1
내 풀이
function solution(n, control) {
for (let i = 0; i < control.length; i++){
if (control[i] == 'w'){
n += 1;
} else if (control[i] == 's'){
n -= 1;
} else if ( control[i] == 'd'){
n += 10;
} else {
n -= 10;
}
}
return n;
}
다른 사람의 풀이
const operations = {
w: (n) => n + 1,
s: (n) => n - 1,
d: (n) => n + 10,
a: (n) => n - 10,
};
function solution(n, control) {
return [...control].reduce((prev, op) => operations[op](prev), n);
}
for문 안쓰고 이렇게도 풀 수 있군,,,
수 조작하기2
내 풀이
function solution(numLog) {
var control = '';
for (let i = 0; i < numLog.length; i++){
var temp = numLog[i] - numLog[i-1]
if ( temp === 1){
control += 'w';
} else if (temp === -1){
control += 's';
} else if (temp === 10){
control += 'd';
} else if (temp === -10){
control += 'a';
}
}
return control;
}
수열과 구간 쿼리3
내 풀이
function solution(arr, queries) {
for (let i = 0; i < queries.length; i++){
const temp = arr[queries[i][0]];
arr[queries[i][0]] = arr[queries[i][1]];
arr[queries[i][1]] = temp;
}
return arr;
}
처음에는 배열 전체를 교환하는 실수를 했다. temp에 저장해 놓고 다시 넣어주는 식으로 풀어야 한다!
그리고 문제 이해하는데 한참 걸렸다.. ㅋ 원소를 교환하는게 아니라 해당 인덱스에 있는 수를 교환해주어야 한다.
11월 13일
수열과 구간 쿼리2
내 풀이
function solution(arr, queries) {
var answer = [];
for (let i = 0; i < queries.length; i++){
var start = queries[i][0];
var end = queries[i][1];
var target = queries[i][2];
var filteredArr = arr.filter(function (value, index){
return index >= start && index <= end && value > target;
});
if (filteredArr.length > 0){
var minVal = Math.min(...filteredArr);
answer.push(minVal);
} else {
answer.push(-1);
}
}
return answer;
}
다른 사람의 풀이
function solution(arr, queries) {
return queries.map(([s, e, k]) => arr.slice(s, e + 1).filter((n) => n > k).sort((a, b) => a - b)[0] || -1);
}
이제 어느정도!! 문제를 이해한 그대로 푸는건 할 줄 아니... 이제 좀 더 머리를 써서
코드를 간결하게 하는 연습을 해야할듯 ㅎㅎ 막상 풀면 또 못하지만 ㅋ
수열과 구간 쿼리4
내 풀이
function solution(arr, queries) {
for (const [s,e,k] of queries){
for (let i = s; i <= e; i++){
if (i % k === 0){
arr[i]++;
}
}
}
return arr;
}
아 진짜 헷갈린다 ㅜㅜ~~~~~~~~~이거 푸는데 너무 오래걸려서 눈물만 줄줄
고민을 하면 할수록 index랑 value가 머릿속에서 빙빙 도니까 빨리 코드 작성해놓고 생각해야겠다...............
배열 만들기2
내 풀이
function solution(l, r) {
var answer = [];
var found = false;
for (let i = l; i <= r; i++){
let str = i.toString();
if (/^[50]+$/.test(str)){
answer.push(i);
found = true;
}
}
if (!found){
answer.push(-1);
}
return answer;
}
문자열로 바꿔준 뒤 정규표현식으로 5와 0이 들어간 문자열을 찾아서 배열에 추가하고,
처음에는 그냥 else로 -1을 추가했는데, 그렇게 하면 안된다!! (당연함)
그래서 boolean으로 찾았을 경우와, 아닌 경우를 나눠서 반환했다.
'javascript' 카테고리의 다른 글
[프로그래머스] 11월21일 ~ 11월27일 (0) | 2023.11.21 |
---|---|
[프로그래머스] 11월14일 ~ 11월20일 (0) | 2023.11.15 |
[프로그래머스] 10월31일 ~ 11월6일 (0) | 2023.10.31 |
[프로그래머스] 10월 27일 ~ 10월 30일 (1) | 2023.10.27 |
[프로그래머스] 10월 22일 ~ (1) | 2023.10.23 |