20220723_TIL_자바스크립트 문법 강의, 알고리즘 챌린지까지 완료

codeing999·2022년 7월 24일
0

TIL/WIL

목록 보기
7/22

오늘 한일 및 회고

@ 노드 강의를 듣기 시작했다. express를 배우기에 앞서 문법을 먼저 배웠다.
@ CS 스터디 발표. 피싱과 SQL 인젝션 위주로 좀 더 조사해보았다.
@ 알고리즘 챌린지까지 완료
@ 자바스크립트 문법들도 시간만 많으면 더 공부하고 더 정리하고 싶은데 주특기 주차가 시작되고 개인과제가 있다보니 시간이 부족하다. 일단 노드 강의가 우선인데 필기하면서 들으려니 진도가 늦다. 좀 더 속도를 내긴 해야겠다.

20220-10-12 여기에 다 몰아 넣은 글들을 따로 빼야겠다.

Node.js 강의

다 옮김.
변수 선언
자료형
함수
동기/비동기
블라킹/논블라킹
promise, async, await
호이스팅, TDZ
등에 대해 배웠다.

알고리즘 챌린지

알고리즘 모든 문제를 다 풀었다. 달리기반 문제와 챌린지 문제까지.

36. 키패드 누르기

//[카카오 인턴] 키패드 누르기. 이건 다른 답들 봐도 짧은 코드가 하나도 없네. 
function distance(a, b)    //칸 이동 수 구하는 함수.
    return Math.abs(a[0]-b[0]) + Math.abs(a[1]-b[1]);

function solution(numbers, hand) {
    let pri = (hand == "left"? 'L' : 'R');
    var coo = [[1,0],       //해당 번호의 좌표값.
               [0, 3], [1, 3], [2, 3],
               [0, 2], [1, 2], [2, 2],
               [0, 1], [1, 1], [2, 1],
              ];
    var lc = [0,0];
    let rc = [2, 0];
    var answer = '';
    for ( v of numbers){    //첨에 걍 for문 쓰다가 numbers[i] 계속 써야되서 바꿈.
        if ([2, 5, 8, 0].includes(v)){
            //console.log(numbers[i], lc, distance(lc, coo[numbers[i]]), rc, distance(rc, coo[numbers[i]]));
            if ( distance(lc, coo[v]) < distance(rc, coo[v]) ){
                answer+='L';
                lc = coo[v];
            }
            else if (distance(lc, coo[v]) > distance(rc, coo[v])){
                answer+='R';
                rc= coo[v];
            }
            else {
                answer+=pri;
                if (hand == "left") lc = coo[v];
                else rc = coo[v];
         }
            
        } 
        else if ([1, 4, 7].includes(v)){
            answer+='L';
            lc = coo[v];
        }
        else{
            answer+='R';
            rc= coo[v];
            
        }
    }
    
    return answer;
}

/*
function solution(numbers, hand) {
    let pri = (hand == "left"? 'L' : 'R');
    var coo = [[1,0],       //해당 번호의 좌표값.
               [0, 3], [1, 3], [2, 3],
               [0, 2], [1, 2], [2, 2],
               [0, 1], [1, 1], [2, 1],
              ];
    var lc = [0,0];
    let rc = [2, 0];
    var answer = '';
    for ( i = 0; i < numbers.length; i++){
        if ([2, 5, 8, 0].includes(numbers[i])){
            //console.log(numbers[i], lc, distance(lc, coo[numbers[i]]), rc, distance(rc, coo[numbers[i]]));
            if ( distance(lc, coo[numbers[i]]) < distance(rc, coo[numbers[i]]) ){
                answer+='L';
                lc = coo[numbers[i]];
            }
            else if (distance(lc, coo[numbers[i]]) > distance(rc, coo[numbers[i]])){
                answer+='R';
                rc= coo[numbers[i]];
            }
            else {
                answer+=pri;
                if (hand == "left") lc = coo[numbers[i]];
                else rc = coo[numbers[i]];
         }
        } 
        else if ([1, 4, 7].includes(numbers[i])){
            answer+='L';
            lc = coo[numbers[i]];
        }
        else{
            answer+='R';
            rc= coo[numbers[i]];
        }
    }
    return answer;
}
*/

37. [1차] 다트게임

//[1차] 다트 게임
function solution(dartResult) { //정규표현식 쓰면 편할려나.
    let r = dartResult
    const nums = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
    const bonuses = {S: 1, D: 2, T: 3};
    const ops = ['*', '#'];
    let scores = [];
    score = 0;
    bonus ='';
    scoreidx = -1;
    for (i = 0; i < r.length; i++){
        if ( (nums.includes(r[i])) && nums.includes(r[i+1]) ){
            score = r[i] + r[i+1];  //score는 숫자변수일텐데 문자인 숫자가 들어가서 알아서 변환이되는건가?
            i++;
        }
        else score = r[i];
        i++;
        bonus = bonuses[r[i]];
        scores.push(Math.pow(score,bonus)); //이때도 보너스 문자형일텐데 알아서 숫자로?
        scoreidx++;
        if( r[i+1] == '*' ) {
            i++;
            scores[scoreidx-1] *=2;
            scores[scoreidx] *=2;
        }
        else if ( r[i+1] == '#'){
            i++;
            scores[scoreidx] *=-1;
        }   
    }
    return scores[0]+scores[1]+scores[2];
}

38. 최대값과 최소값

//최댓값과 최솟값
function solution(s) {
    let temp = s.split(' ').sort( (a,b)=>a-b); //배열에 있는 '3' 이런 문자로된 숫자도 숫자로 받아들이네. 모르고 걍 한건데. 다른 답보면 Math.max도 문자인 숫자에 그대로 써짐.
    console.log(temp);
    var answer = '';
    return answer+temp[0] +' '+ temp[temp.length-1];
}

39. 숫자의 표현

/* 숫자의 표현
1 에서 1씩 더해진 수
1+2 에서 2씩 더해진 수
1+2+3 에서 3씩 더해진 수
1+2+3+4 에서 4씩 더해진 수
...
*/
function solution(n) {
    count = 0;
    for (let i = 1; (i*(i+1))/2<=n; i++){        
        if ( (n - (i*(i+1))/2) % i  == 0) {
            count++;
        }
    }    
    return count;
}

40. 크레인 인형뽑기 게임

function solution(board, moves) { //크레인 인형뽑기 게임
    let bucket = [];
    for (i = 0; i<moves.length; i++){
        for( j = 0; j<board.length; j++){
            //console.log(j, moves[i]-1, board[j][moves[i]-1] );
            if(board[j][moves[i]-1] !=0){
                bucket.push(board[j][moves[i]-1]);
                board[j][moves[i]-1] = 0;
                break;
            }
        }
    }
    
    let count = 0;
    for (i = 0; i<bucket.length-1; i++){
        //console.log(bucket);
        if ( bucket[i] == bucket[i+1]){
            count+=2;
            bucket.splice(i, 2);
            i = -1; //와 for문 끝나면 +1되니까 0말고 -1로 했어야되네 이거때메 몇개만 안풀려서 막혔음.
        }
    }
    return count;
}
profile
코딩 공부 ing..

0개의 댓글