항해의 여정(10)

qoqo_mi·2022년 5월 18일
0
post-thumbnail

📬 머리식힐 때 읽어본 글

518일동안 단 하루도 빠지지 않고 알고리즘을 풀었다.

  • 직무 변환을 하고자 했던 이유 중 하나가 내가 있는 세상엔 정보가 턱 없이 부족했고 인터넷 상으로라도 같이 공유할 수 있는 대상이 적다는 것이였다.
  • 그래서 프론트엔드 준비를 시작할 때부터 지금까지 정보의 창에서 정-말 많은 정보를 얻었었는데 오늘 어째서인지 이 글이 눈에 들어왔다.
  • 시험목적으로 푼 것이 아니라 그저 자신만의 levelup 목적으로 달성하신 분이였는데 알고리즘 문제를 풀면서 영어 수학 조차도 공부하시게 되셨다는 ..

기억해두고 싶은 구절 1

이런말 하면서 복잡도 이해없이 짜서 DB에게 가혹행위를 시킨다던지…애초부터 잘못짠 소스를 리팩토링 한답시고 붙잡고 앉아있는 경우를 많이 봤다.

결국 이 모든건 Back-end Front-end를 떠나서 서버비용 증가, 사용자 경험을 저하등 많은 문제를 야기한다.

나는 알고리즘이 실제 문제 해결에 분명히 도움이된다고 생각한다.또한 System Design을 효율적으로 설계 하는데도 도움이 된다고 생각한다.

기억해두고 싶은 구절 2

알고리즘 트레이닝은 당신에게 '무엇이 잘못됐는지' 파악하는 시간을 단축 시켜 준다.어쩌면 이 트레이닝을 통해서 당신이 죽을때까지 깨닫지 못하는 무언가를 알게 될 수도 있다.

아는만큼 보인다.


📚 자바스크립트 기초 강좌 : 100분 완성

break, continue

  1. break
    //confirm창 :true시 계속해서 띄우기
    while(true){
    let answer = confirm("계속할까요? "); // confirm도 확인하는 알림창이다 (확인: true, 취소 : false)
    if(!answer){ // answer가 false라면 
    			break;
    		}
    }
  1. continue

    // 짝수만 찍기 
    for(let i = 0; i < 10; i++){ // 3.i =2로 다시 진행된다.
    		if(i%2){  // 1. i=1이면 
    			continue; //2. continue를 만나
    		}
    console.log(i) // 
    }
    💡 명확한 횟수 for , 아니면 while

function : 목적은 ‘중복’을 줄이는 것!

  1. 함수 작성

    // 함수     함수이름  매개변수
    function showError(){
    	alert('에러가 발생했습니다. 다시 시도해주세요');
    } 
    // 포인트 : showError라는 함수를 만들고 다른 곳에서 사용할 수 있다는 것이다.
    // 한 서비스에서 데이터 호출, 로그인, 결제 등을 실패할때마다 함수 한번이면 끝난다. 
    **showError();**
  2. 매개변수 , 지역변수

    • msg는 함수 안에서만 사용 가능한 변수인데 이걸 지역변수라고 한다.
    • Function 밖에서도 사용하려면 아래와 같이 작성해주어야 한다.
      function sayHello(name){
          let msg = 'Hello';
          if(name){ //if를 이런식으로도 사용할 수 있다.
              msg += name;
          }
          console.log(msg)
      }
      
      sayHello('위')
      // 출력 : Hello위
  3. 전역변수

  • 아래 코드처럼 어디서든 접근 가능한 변수를 전역변수라고 한다.

  • Function 밖에서도 사용하는 것이다.

    **let msg = 'Hello'; /**/ 외부로 빼준다.
    
    function sayHello(name){
        
        if(name){ 
            msg += name;
        }
        console.log(msg)
    }
    sayHello('위');
    // 출력 : Hello위
  • 차이점은 아래의 코드에서 확인해보자

    let msg = 'Hello';
    console.log('함수 호출 전')
    console.log(msg)
    
    function sayHello(name){
        
        if(name){
            msg += name;
        }
    console.log('함수 내부')
        console.log(msg)
    }
    
    sayHello('위');
    console.log('함수 호출 후')
    console.log(msg)
    // 출력 : Hello위

    • 출력화면 함수 내부에서 ‘위’ 가 왜 먼저 찍히지 ? 라고 혼동하면 안된다. 혼동될 시 2. 번을 제대로 숙지해야한다.

✏️알고리즘

31번 같은 숫자는 싫어

  1. new Set()으로 중복값 제거 → Error

    1. ‘연속적’으로 나타나는 수를 제거
    2. new Set()은 모든 중복값 제거

  1. 만약 i번째 원소가 i+1의 원소와 같지 않으면 i번째 원소를 새로운 변수에 저장한다.

    function solution(arr)
    {
            var newbox = [];  // 새로운 변수
        for(let i = 0; i <arr.length; i++){
            if(arr[i] !== arr[i+1]){ // i번째 원소와 i+1의 원소가 같지 않다면 
                newbox.push(arr[i]) // 새로운 변수에 저장한다.
            }
        }
        
        return newbox;
    }

32번 두 개 뽑아서 더하기

  1. 내풀이
function solution(numbers) {
    let total =[];
    
    for(let i = 0; i < numbers.length; i++){
        for(let n = i+1; n < numbers.length; n++ ){
            total.push(numbers[i] + numbers[n])    // i번째와 i+1번째를 더해 total에 담아준다.      
           
        }    
    }
    var get = [...total] // total을 배열 1개로 만들어주고
    var set = new Set(get) // 중복을 제거하고
    var end = [...set] //set{} -> []배열로 저장한다
    
    return end.sort(function (a,b) {return a-b;}); // 오름차순
}
  1. 다른사람 풀이
  • set함수에 ...를 추가하면 바로 배열로 만들 수 있다니.. ㅋㅋㅋ나같이 두번에 걸치지 않아도 된다..
function solution(numbers) {
    const temp = []

    for (let i = 0; i < numbers.length; i++) {
        for (let j = i + 1; j < numbers.length; j++) {
            temp.push(numbers[i] + numbers[j])
        }
    }

    const answer = [...new Set(temp)]

    return answer.sort((a, b) => a - b)
}

33번 로또의 순위

34번 모의고사

  1. 문제의 이해
  • 수포자 1,2,3은 중복되는 배열이므로 초기 값으로 기존 반복되는 배열을 선언해주어야한다.
  • 가장 큰 수를 뽑고 → index[i+1]값을 반환해야한다.
  1. 수포자들의 맞은 답을 count 하는 것까지는 찾았지만 큰값찾기부터 어떻게 해줘야하는지 .. 검색하기 시작했다 .

    //1,2,3 중에 제일 큰 값 찾기
    var max =0;
     var point=[1,2,3]
        for(var j=0; j<point.length; j++){
            if(point[j] > max)
                max = point[j];
        }console.log(max)
  2. 큰값을 찾고 index+1의 값으로 호출

    function solution(answers) {
       var list =[[1,2,3,4,5],
                 [2,1,2,3,2,4,2,5],
                 [3,3,1,1,2,2,4,4,5,5]]
    
        var point =[0,0,0]
        var answer =[];
        for(let i =0; i < answers.length; i++){
            //1수포자
            if(answers[i] === list[0][i%5]){
                point[0] += 1;
            }
             if(answers[i] === list[1][i%8]){
                point[1] += 1;
            }
            if(answers[i] === list[2][i%10]){
                point[2] += 1;
            }
        }
        var max = [] ; 
        for(let j = 0; j<point.length; j++){
            if(max < point[j]){
                max = point[j]
    
            }
        }// 제일 큰 값 5를 넣었다. 그럼 그걸 또 point와 비교해서 번째수를 넣어준다. 
        for (let y = 0; y < point.length; y++){
            if(max === point[y]){
                answer.push(y+1)
            }
        } 
        return answer;
    
    }
    
    // 만약에  for 문에서 몫의 값을 추출하지 않는다면 
    
    //  function solution(answers) {
    //     var answer = [];
    //     var a1 = [1, 2, 3, 4, 5];
    //     var a2 = [2, 1, 2, 3, 2, 4, 2, 5]
    //     var a3 = [ 3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
    
    //     var a1c = answers.filter((a,i)=> a === a1[i%a1.length]).length;
    //     var a2c = answers.filter((a,i)=> a === a2[i%a2.length]).length;
    //     var a3c = answers.filter((a,i)=> a === a3[i%a3.length]).length;
    //     var max = Math.max(a1c,a2c,a3c);
    
    //     if (a1c === max) {answer.push(1)};
    //     if (a2c === max) {answer.push(2)};
    //     if (a3c === max) {answer.push(3)};
    
    //     return answer;
    // }

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

  1. sort함수를 완벽하게 이해해야만 풀 수 있는 문제가 아닐까 싶다

  2. a> b값을 비교해서 a>b일때 오름차순으로 정렬할 수 있는 함수

  3. sort함수 자체적으로 문자열을 비교하는 함수이므로 모든 값에 이런식으로 사용하면 오름차순 내림차순으로 정렬할 수 있다.

    function solution(strings, n) {
        return strings.sort((a,b)=>{
            if(a[n] > b[n]) { return 1; }
            if(a[n] < b[n]) { return -1; }
            if(a[n]=== b[n]){
                if(a > b){ return 1; }
                if(a < b){ return -1;}
            }
        });
    
    }

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

  • var a = "SfkdnfgsS”

  • a.split('') =['S', 'f', 'k', 'd', 'n', 'f', 'g', 's', 'S']

  • b.sort() ='S', 'S', 'd', 'f', 'f', 'g', 'k', 'n', 's']

  • d.reverse() = ['s', 'n', 'k', 'g', 'f', 'f', 'd', 'S', 'S']

  • e.join('') = 'SSdffgkns’

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

📚 Cs스터디 진행


내일 목표

  1. 블로그 40번까지 업데이트
  2. cs스터디 정리
  3. 노션 하루일지 정리
  4. 과제 제출
  5. 매니저님 과제 풀기
  6. 100분 js 끝내기
  7. 미라클레터 읽기 !

💭 기술매니저님과 멘토링

안지현 기술 매니저님과 멘토 이후

  1. 항해 안에서 어떤 사람이 될 것인가 ?
  2. css 안해놓으면 걸림돌 ! 잡고가라
  3. 실전이 가장 중요 , 실전을 하기 위해서 지금 달리고 있는 것
  4. css 코드를 작성하여 당근정원 키우기 : GRID GARDEN
  5. Flexbox game : GRID GARDEN
  6. 엘리언니 js 배열 : 배열 메소드를 많이 사용한다고 하니 꼭 보고 가도록 추천해주심
  1. Dom event

0개의 댓글