[TIL] d+11

river·2022년 3월 17일
0

👨‍💻

  1. 오늘은 정말 졸려서 일찍 자야겠다.
    (라고 11시에 써놓고 또 1시가 넘었다...!😫)

  2. 게더가 사용자도 많고 캠도 계속 공유를 하고 있어서 그런지 cpu 점유율을 생각보다 꽤 먹는다. 검색해 보니 가끔 점유율이 폭등하는 버그가 발생하기도 하는 것 같구... 나의 소중한 19년생 컴퓨터쿤에겐 조금 힘겨운 모양이야...... 🥺 취업하면 컴퓨터부터 새로 맞출 거야... 그 의지 하나로 계속 달리고 있다.

  3. 오늘 CS스터디는 내가 발표할 차례라 열심히 준비를 했는데, 갑자기 4챕터부터 난데없이 과학시간이 돼버려서 당황스러웠다 ㅋㅋㅋ 간만에 학교 다닐 때 생각나서 재밌었음...
    https://cat-quiver-27e.notion.site/chapter-4-0d0be346cdf44a7ab239eb5f96338ee9

  4. 요즘 코딩할 때 드래그하고 괄호나 따옴표 누르면 자동으로 싹 감싸지는 거 그새 버릇됐는지 아무 데서나 막 써가지고 텍스트 날려먹은 게 한두 번이 아니다...


오늘 읽었던 재미있는 글

브라우저 로딩 동안의 사용자 경험을 개선하는 방법
https://eunjinii.tistory.com/44

평창올림픽 드론쇼 만들기
https://velog.io/@heekang/Vanilla-JS-평창올림픽-드론쇼-만들기

이거 보고 prototype 이해 못하면 강의접음
https://youtu.be/wUgmzvExL_E



오늘 풀지 못한 문제

모의고사

https://programmers.co.kr/learn/courses/30/lessons/42840


참고 링크
https://medium.com/@760kry/자바스크립트-알고리즘-모의고사-c9da0802bcb4

점수 count를 올릴 때 왜 조건문에서 인덱스를 길이로 나눈 나머지 값을 구하는 건가 했는데, 아주 간단한 이유였다.

수포자1 = [1, 2, 3, 4, 5]
  수포자1이 1번 문제에 작성한 답 = 1 = 수포자1[0]
  수포자1이 2번 문제에 작성한 답 = 2 = 수포자1[1]
  수포자1이 3번 문제에 작성한 답 = 3 = 수포자1[2]
  수포자1이 4번 문제에 작성한 답 = 4 = 수포자1[3]
  수포자1이 5번 문제에 작성한 답 = 5 = 수포자1[4]
  수포자1이 6번 문제에 작성한 답 = 1 = 수포자1[5]?

배열 내의 인덱스를 돌고 있을 땐 괜찮지만, 배열에 존재하는 인덱스를 넘어섰을 때, 예를 들어 배열 내에 수포자 1이 6번 문제(i=5)의 정답을 입력했을 때에 대한 값은 존재하지 않기 때문에(해당 배열의 길이=5) 당연히 요소를 찾을 수 없게 되는데, 해당 배열의 길이로 나누어 나머지를 인덱스로 삽입하면 다시 첫 인덱스부터 돌아갈 수 있었다............

ex) 
수포자1[5 % 배열의길이(5)] = 수포자1[0]
수포자1[6 % 배열의길이(5)] = 수포자1[1]




오늘 푼 문제

같은 숫자는 싫어

https://programmers.co.kr/learn/courses/30/lessons/12906

function solution(arr){
    let answer = [];

    for (let i = 0; i < arr.length; i++) {
     if (arr[i] !== arr[i+1]) {
         // arr.splice(i, 1)
         // console.log(arr)
         answer.push(arr[i])
     }
    }

    return answer;
}

처음엔 i번째의 요소와 바로 다음 요소를 비교해 수가 같을 경우, splice를 사용하여 삭제해버리는 방식으로 진행했으나, 앞의 요소를 삭제하면 나머지 요소들이 빈자리를 채워 앞으로 당겨지기 때문에 그다음 번의 반복문이 돌 때 처음의 의도대로 돌아가지 않는다.
때문에 기존의 배열은 그대로 두고, 대신 중복된 숫자들을 빈 배열 answer에 push해버리는 방식으로 진행하였다.

splice를 사용한다고 해결하지 못하는 것은 아니지만 효율성 검사에서 막히는 듯.



두 개 뽑아서 더하기

https://programmers.co.kr/learn/courses/30/lessons/68644

function solution(numbers) {
   let answer = [];
    
    for(let i = 0; i < numbers.length-1; i++){
        for(let j = i+1; j < numbers.length; j++){
            let sum = numbers[i] + numbers[j]
            if(answer.indexOf(sum) < 0){
                answer.push(sum)
            }
        }    
    }
    return answer.sort((a,b) => a-b)
}

서로 다른 인덱스의 숫자를 뽑아야 하기 때문에 반복문을 중첩하여 돌렸다.
같은 배열의 서로 다른 위치에 있는 두 요소를 더한 뒤, 조건문을 돌려 answer 배열에 반복문을 돌려 나온 sum들이 존재하지 않을 경우 answer에 push한다.



로또의 최고 순위와 최저 순위

https://programmers.co.kr/learn/courses/30/lessons/77484

function solution(lottos, win_nums) {
    let rank = [6, 6, 5, 4, 3, 2, 1];
    let answer = 0;
    let zero = 0;
    
    // for(let i = 0; i < lottos.length; i++) {
    //     for (let j = 0; j < lottos.length; j++) {
    //         if (lottos[i] == win_nums[j]) answer++;
    //     }
    //     if (lottos[i] == 0) zero++;
    // }
    // console.log(rank[answer-1])
    // console.log(zero)
    // return [rank[answer-1],rank[answer+zero]];

    for(let i = 0; i < lottos.length; i++) {
        
        if (lottos[i] == 0) zero++;
        
        for (let j = 0; j < lottos.length; j++){
               if (lottos[i] == win_nums[j]) answer ++;
        }
    }
    return [rank[answer+zero], rank[answer]]
}

주석 처리된 코드는 뇌가 굴러가는 대로 짰던 첫 코드... 물론 실패했다

먼저 반복문을 돌리면서 0을 찍은 번호가 있는지 확인해 zero 변수에 1씩 카운트한다.
그리고 다시 반복문을 중첩해 사용자가 찍은 번호 중 당첨자 번호와 같은 번호가 있을 경우 answer 배열에 1씩 카운트한다.
마지막으로 rank 배열의 answer+zero번째, rank 배열의 answer번째 요소를 같이 찍어 return하며 종료한다.



문자열 내 마음대로 정렬하기

https://programmers.co.kr/learn/courses/30/lessons/12915

function solution(strings, n) {
    let answer = [];
    let n_str = [];
    
    for (let i = 0; i < strings.length; i ++) {
        n_str.push(strings[i][n] + strings[i])
    }
    n_str.sort()
    for (let j = 0; j < n_str.length; j++) {
        answer.push(n_str[j].replace(n_str[j][0], ''))  
    }
    return answer;
}

간단하게 설명하자면 문자 strings의 n번째 글자를 맨 앞에도 붙여 넣어 해당 글자를 기준으로 정렬한 뒤 다시 맨 앞의 글자를 지워버린다.



문자열 내림차순으로 배치하기

https://programmers.co.kr/learn/courses/30/lessons/12917

function solution(s) {
    let answer = s.split('').sort().reverse().join('');
    return answer;
}

적혀있는 그대로... 잘라서 배열로 만들고 정렬하고 뒤집고 다시 문자열로 만들었다. 이건 저번에 풀었던 문제와 아주... 유사했다!



내일부턴 드디어 3주간 주특기 주간이다
기대되고 두려워~~ 두렵다~~
하지만 또 능히(는 아닐지라도) 할 수 있을 것이다~~

profile
가보자고

0개의 댓글