고양이와 코딩
[프로그래머스] 11월29일 ~ 12월03일 본문
11월 29일
2의 영역
문제를 이해할때 주의해야 하는데, 가장 작은 연속된에 집중하지 말고 "배열 안의 2가 모두 포함된" 에 집중해야한다 !
결국 arr배열에서 2부터 2까지를 반환하는것.
내 풀이
function solution(arr) {
let startNum = arr.indexOf(2);
let endNum = arr.lastIndexOf(2);
if(arr[startNum] !== 2 || arr[endNum] !== 2){
return [-1];
}
return arr.slice(startNum, endNum + 1);
}
indexOf, lastIndexOf 메서드를 사용해서 처음에 나오는 2와 마지막에 나오는 2를 찾았다.
찾으면 slice로 배열을 반환하고, 2가 없으면 -1을 return 해준다.
여기 if문에서 startNum !== 2 이런식으로 비교하면 안된다 ㅎㅎ
배열 안의 요소와 비교해줄라면 arr[startNum] !== 2 로 감싸줘야댐... gpt한테 무러봤다..
배열 조각하기
처음 코드
function solution(arr, query) {
var answer = [];
for (let i = 0; i < query.length; i++){
if(query[i] % 2 == 0){
arr = arr.slice(0, query[i] + 1);
} else if(query[i] % 2 !== 0){
arr = arr.slice(query[i], arr.length);
}
}
return arr;
}
첫 테스트 케이스만 성공하고.. 제출했더니 다틀림..
제출 코드
function solution(arr, query) {
var answer = [];
for (let i = 0; i < query.length; i++){
if(i % 2 == 0){
arr = arr.slice(0, query[i] + 1);
} else if(i % 2 !== 0){
arr = arr.slice(query[i], arr.length);
}
}
return arr;
}
하 문제 이해하는데 개오래걸렸다.... ㅜㅜ 그니까 이게 짝수 홀수가 query의 값을 말하는게 아니라 쿼리의 인덱스 값을 말하는거였음...
그렇다고 말을 해주지 진짜 0, 1, 2, 3 이게 홀수일때, 짝수일때로 풀면 되는거였음니다.. ㅎㅎ
n번째 원소부터
내 풀이
function solution(num_list, n) {
return num_list.slice(n-1, num_list.length);
}
11월30일
순서 바꾸기
내 풀이
function solution(num_list, n) {
let n_after = num_list.slice(n, num_list.length);
let n_before = num_list.slice(0, n);
return Array.from(n_after).concat(n_before);
}
Array.from 메서드 익히기,, concat도 까먹지 말기..
왼쪽 오른쪽
내 풀이
function solution(str_list) {
let answer = [];
for (let i = 0; i < str_list.length; i++) {
if (str_list[i] === 'l') {
answer = str_list.slice(0, i);
break;
} else if (str_list[i] === 'r') {
answer = str_list.slice(i + 1);
break;
}
}
return answer;
}
n 번째 원소까지
내 풀이
function solution(num_list, n) {
return num_list.slice(0, n);
}
n개 간격의 원소들
내 풀이
function solution(num_list, n) {
var answer = [];
for (let i = 0; i < num_list.length; i += n){
answer.push(num_list[i]);
}
return answer;
}
12월01일
홀수VS짝수
내 풀이
function solution(num_list) {
let evenSum = 0;
let oddSum = 0;
num_list.forEach((value, index) => {
if((index + 1) % 2 !== 0){
oddSum += value;
} else if ((index + 1) % 2 === 0){
evenSum += value;
}
})
return Math.max(evenSum, oddSum) ;
}
더 간단하게 풀 수 있을 것 같아서 다른 사람들의 풀이를 찾아보았따
function solution(num_list) {
let odd = 0;
let even = 0;
num_list.forEach((x,i) => i%2 == 0 ? even += x : odd += x);
return Math.max(odd, even);
}
5명씩
내 풀이
function solution(names) {
var answer = [];
for (let i = 0; i < names.length; i += 5){
answer.push(names[i]);
}
return answer;
}
할 일 목록
내 풀이
function solution(todo_list, finished) {
var answer = [];
for (let i = 0; i < finished.length; i++){
if(finished[i] === false){
answer.push(todo_list[i]);
}
}
return answer;
}
n보다 커질 때까지 더하기
내 풀이
function solution(numbers, n) {
var answer = 0;
for (let i = 0; i <numbers.length; i++){
answer += numbers[i];
if (answer > n){
break;
}
}
return answer;
}
다른 사람의 풀이
function solution(numbers, n) {
var answer = 0;
let i = 0;
while(answer <= n) {
answer += numbers[i++]
}
return answer;
}
이렇게도 할 수 있군여
수열과 구간 쿼리1
내 풀이
function solution(arr, queries) {
var answer = [];
for (let i = 0; i < queries.length; i++) {
const [s, e] = queries[i];
for (let j = s; j <= e; j++) {
arr[j]++;
}
}
return arr;
}
12월02일
조건에 맞게 수열 변환하기 1
내 풀이
function solution(arr) {
var answer = [];
arr.forEach((value) => {
if(value >= 50 && value % 2 === 0){
answer.push(value / 2);
} else if(value < 50 && value % 2 !== 0){
answer.push(value * 2);
} else {
answer.push(value);
}
})
return answer;
}
짝수이면서 50보다 작은 경우도 생각해줍시다
조건에 맞게 수열 변환하기 2
위에서 풀었던 문제에 조건이 더 추가된 문제
내 풀이
function solution(arr) {
let x = 0;
while (true) {
let temp = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] >= 50 && arr[i] % 2 === 0) {
temp.push(arr[i] / 2);
} else if (arr[i] < 50 && arr[i] % 2 !== 0) {
temp.push((arr[i] * 2) + 1);
} else {
temp.push(arr[i]);
}
}
let isEqual = true;
for (let i = 0; i < arr.length; i++) {
if (arr[i] !== temp[i]) {
isEqual = false;
break;
}
}
if (isEqual) {
return x;
}
arr = temp;
x++;
}
}
코드가 너저분하지만.. ^^ 의외로 보기는 간단하다
위에서 사용했던 for문을 while문 무한루프로 감싸주고 그 안에서 arr[i](현재 arr배열)과 temp[i](저장해놓은 이전 배열) 의 요소들이
같은지 판별하고 다르면 반복문을 끝내고, 같으면 x를 반환한다 !
1로 만들기
내 풀이
function solution(num_list) {
let count = 0;
for (let num of num_list) {
while (num !== 1) {
if (num % 2 === 0) {
num /= 2;
} else {
num = (num - 1) / 2;
}
count++;
}
}
return count;
}
num_list 배열을 순회하면서 while문으로 num이 1이 아닐 경우에 반복하며 count를 증가시킨다
길이에 따른 연산
내 풀이
function solution(num_list) {
if (num_list.length >= 11) {
const sum = num_list.reduce((acc, num) => acc + num, 0);
return sum;
} else if (num_list.length <= 10){
const mul = num_list.reduce((acc, num) => acc * num, 1);
return mul;
}
}
12월03일
원하는 문자열 찾기
내 풀이
function solution(myString, pat) {
const myString2 = myString.toLowerCase();
const pat2 = pat.toLowerCase();
return myString2.includes(pat2) ? 1 : 0;
}
대문자로 바꾸기
내 풀이
function solution(myString) {
return myString.toUpperCase();
}
배열에서 문자열 대소문자 변환하기
내 풀이
function solution(strArr) {
const newArr = strArr.map((value, index) => {
if(index % 2 !== 0){
return value.toUpperCase();
} else {
return value.toLowerCase();
}
})
return newArr;
}
A 강조하기
내 풀이
function solution(myString) {
const strArr = myString.split('');
const newStr = strArr.map((value, index) => {
if( value === 'a'){
return 'A';
} else if( value > 'A' && value <= 'Z') {
return value.toLowerCase();
} else {
return value;
}
})
return newStr.join('');
}
특정한 문자를 대문자로 바꾸기
내 풀이
function solution(my_string, alp) {
const arrStr = my_string.split('');
newArr = arrStr.map((value, index) => {
if (value == alp){
return value.toUpperCase();
} else {
return value;
}
})
return newArr.join('');
}
'javascript' 카테고리의 다른 글
[프로그래머스] 12월04일 ~ 12월10일 (0) | 2023.12.04 |
---|---|
[프로그래머스] 알고리즘 12월01일 ~ 12월10일 (0) | 2023.12.01 |
[프로그래머스] 11월21일 ~ 11월27일 (0) | 2023.11.21 |
[프로그래머스] 11월14일 ~ 11월20일 (0) | 2023.11.15 |
[프로그래머스] 11월7일 ~ 11월13일 (0) | 2023.11.07 |