[프로그래머스 LV.0_자바스크립트]주사위게임1, 수열과 구간 쿼리3, 코드처리하기(FindIndex)

Hyoyoung Kim·2023년 5월 20일
0
post-thumbnail

😰 어려웠던 문제

1. 주사위 게임 2

→ 이건 어렵지 않았지만 개념이 부족했다…

  • 처음 풀었던 코드
function solution(a, b, c) {
let isTrue = (a===b===c)
    if(isTrue ) return (a+b+c)*(a**2+b**2+c**2)*(a**3+b**3+c**3)
    if(!isTrue )return (a+b+c)*(a**2+b**2+c**2)
    return a+b+c;
}
  • 정답 코드
function solution(a, b, c) {
    if(a===b&&a===c&&b===c) return (a+b+c)*(a**2+b**2+c**2)*(a**3+b**3+c**3)
    if(a===b||a===c||b===c)return (a+b+c)*(a**2+b**2+c**2)
    return a+b+c;
}
console.log(solution(2,6,1)) //9
console.log(solution(5,3,3)) //473
console.log(solution(4,4,4)) //110592

2. 수열과 구간 쿼리 3

  • 처음 코드
function solution(arr, queries) {
    var answer = [...arr];
    for(let i=0; i<queries.length; i++){
        answer[queries[i][0]]=answer[queries[i][1]];
        answer[queries[i][1]]=answer[queries[i][0]];
//위의 코드를 통해 출력하고 싶었던 결과값은 [3, 1, 2, 0, 4]인데 위 코드는
//answer[0]=answer[3] ->[3, 1, 2, 3, 4]
//answer[3]=answer[0] -> 이렇게 적으면 [3, 1, 2, 3, 4]여기서 answer[3]의 값에 answer[0]의
//값인 3이 들어가기 때문에 [3, 1, 2, 3, 4]이대로 출력된다. 
    }
    return answer;
}

console.log(solution([0, 1, 2, 3, 4],[[0, 3],[1, 2],[1, 4]]	))
  • 정답 코드
function solution(arr, queries) {
    var answer = [...arr];
    for(let i=0; i<queries.length; i++){
        let box = answer[queries[i][0]]
        answer[queries[i][0]]=answer[queries[i][1]];
        answer[queries[i][1]]=box 
    }
    return answer;
}

console.log(solution([0, 1, 2, 3, 4],[[0, 3],[1, 2],[1, 4]]	))

🥳 새로운 방법!! 새로운거 배웠다 ㅎㅎ

function solution(arr, queries) {
    var answer = [...arr];
        [answer[0],answer[3]]=[answer[3],answer[0]]; 
    }
    return answer;
}
  • 쉬운설명
let arr=[1,2];
[arr[0],arr[1]]=[arr[1],arr[0]];

console.log(arr) //[2,1]

3. 코드 처리하기

→ 문제 자체도 이해 안된 문제 😰

😀 새롭게 안 사실! 0도 짝수였다…ㄷㄷ

function solution(code) {
    var ret = '';
    let mode = 0
    return [...code].reduce((acc,cur, index)=>{
        if(mode){
            // mode가 1이면 cur이 '1'이 아니고 index가 홀수일때 acc에 추가해주고 
						//mode를 0로 바꿔준다.
            if(cur!=='1'&&index%2===1) return acc+cur;
            if(cur==='1') mode=0
        }else {
            // mode가 0이면 cur이 '1'이 아니고 index가 짝수일때 acc에 추가해주고
						// mode를 1로 바꿔준다.
            if(cur!=='1'&&index%2===0) return acc+cur;
            if(cur==='1') mode=1
        }
        return acc;
        //acc의 초기값 ''을 줘야함
    },'')||"EMPTY"
 // return 하려는 ret가 만약 빈 문자열이라면 대신 "EMPTY"를 return 합니다.
 //return result || "EMPTY" -> 이런식으로 처리
}

console.log(solution('abc1abc1abc')) //"acbac"

🧐 FindIndex

판별 함수를 만족하는 첫 식별자 반환

  • arr.findIndex(callback)
  • 반환 타입 number, 없다면 -1
  • callback(element, index, array) → 콜백함수가 받는 인자(각 인자는 findIndex 메서드를 호출한 배열에서 받아옴)
  • 원하는 요소의 식별자 찾기 원하는 요소를 찾자마자 메서드를 종료함
const arr = [5, 6, 9, 1, 6, 3, 2, 1, 2];
const find1 = arr.findIndex((element, index, arr) => element === 3); // 6
const find2 = arr.findIndex((e) => e > 8);//2

0개의 댓글