[TIL] 2020/09/17

yongkini ·2020년 9월 17일
0

Today I Learned

목록 보기
35/173

Today, I Will Learn


  • nQueens 마무리
  • 'Self Guided Lessons - Basic CS' 를 통해 여태까지 스프린트 공부 및 부족한 부분 공부

Today, I Learned


  • nQueens 마무리(clear) : 10:00~10:50(50min)
    => 지나고 나서 생각하는거지만..처음에 왜 집중해서 못풀었을까 생각이든다. 분명히 머리속 수도코드로는 처음 코드가 맞았고, 그걸 그대로 구현했을뿐인데..?. 그 때는 자신감이 없었고.. 등의 이유가 생각나지만, 결론적으로 실력이 부족하다 아직. 수도코드를 완벽하게 짜지 못했고, 그랬기에 확신이 없었고, 코드로 제대로 옮기지도 못했다. 확실히 안 것은 프로그래밍은 계속해서 코드를 치는 행위가 아닌 논술처럼 생각을 정리한 뒤에 글을 쓸 때는 그 생각을 단순히 적듯이 코딩도 생각이 80%고, 타이핑이 20%다.
  • 프레임워크(framework) vs 라이브러리(library) :
    => 나만의 비유로 표현해보면, 프레임워크는 네이버 스토어팜 같은 것이다. 즉, 실질적으로 온라인 점포를 운영하는 데에 있어서 주도권을 쥔 쪽은 스토어팜 쪽인 케이스이다. 이와 유사하게 프레임워크는 프로그래머가 프레임워크를 통해 간편하게 목적을 달성할 수 있도록 도구를 제공한다. 이 때, 프레임워크가 단순히 도구 제공자처럼 보이지만, 프레임워크가 제공하는 도구의 틀을 프로그래머는 벗어날 수 없기에(일관성 유지가 되는 근거), 실질적인 주도권은 프레임워크에 있다(스토어팜도 장사는 개인이 하지만, 상품을 올리는 방식, 타이틀 폰트 등 스토어팜이 제공하는 틀 내에서의 선택이다). 이와 달리, 라이브러리는 주도권을 가진 프로그래머가 잠깐 도구를 빌려오는 방식이다. 이렇게 생각해보면, 프레임워크는 한 회사가 만든 패키지 여행 상품과 같고, 라이브러리는 잠깐 잠깐씩 필요할 때만 도움을 주는 인터넷 여행 관련 나무위키 같은 개념이다. 따라서, 라이브러리를 쓰는 데에 있어서는 주도권이 여전히 프로그래머에게 있다고 할 수 있다. 프레임워크의 예시로는 python으로 된 django 프레임워크가 있는데, 모델을 만들어서, 데이터 베이스에 자동으로 생성을 해주고, 쿼리문을 써서 데이터 베이스의 자료를 받아오는 등의 'django만의 형식'이 정해져있고, 프로그래머는 그것을 배우고 나서야 그 프레임워크를 쓸 수 있다. 라이브러리의 예시는 통계관련 수행을 할 때 자주 import해서 쓰는 numpy와 같은 것들이 있다.( 참고 사이트 )
  • Breadth First Search를 이용해서(BFS) 친구 관계(SNS) 자료구조를 만들고, 친구 추천 기능을 만들어보자.
    • //BFS        
          	let storage = [];
              let queue = [];
              function recursion(node) {
                  try {
                      for (let el of node.friends) {
                          // 친구1의 친구들로 for문 ---2
                          // 친구2의 친구들로 for문 ---3
                          if (queue.indexOf(el) === -1) queue.push(el);
                          // 친구1의 친구들을  큐에 푸시, 현재 큐 : [친구2, 친구1-1, 친구1-2]
                          // 친구2의 친구들을 큐에 푸시, 현재 큐 : [친구1-1, 친구1-2, 친구2-1, 친구2-2]
                      }
                      let pop = queue.shift();
                      storage.push(pop);
                      // 현재 큐에 [친구1, 친구2] -- 1
                      return recursion(pop); // 친구1로 recursion ----1
                      //친구2로 recursion ----2
                      // 이렇게 계속 BFS
                  } catch (e) {}
              }
    •         let stack = [];
              function recursion(node) {
                  try {
                      // 제공 받은 노드의 친구들을 스택에 넣고
                      // 쌓은 스택의 맨 끝에 있는 것을 pop(FILO)
                      // 그 맨끝에 있는 노드의 친구들을 스택에 넣고
                      // 다시 쌓은 스택의 맨 끝에 있는 것을 pop .....
                      for (let el of node.friends) {
                          if (stack.indexOf(el) === -1) stack.push(el);
                      }
                      let pop = stack.pop();
                      return recursion(pop);
                  } catch (e) {};
              }
      DFS는 다시 도전해봐야할 것 같다..ㅎㅎ

Planning to Study


Comment


profile
완벽함 보다는 최선의 결과를 위해 끊임없이 노력하는 개발자

0개의 댓글