[HellCoders] Study 3일차

영아·2021년 8월 5일
0

HellCoders Study

목록 보기
3/9
post-thumbnail

🔥 오늘하루는?

  • 알고리즘
    오늘 알고리즘 문제는 자료구조 문제가 매우 어려웠다. 아직 자료구조에 대한 개념도 잘 안잡혀있어서 이 개념을 활용하여 문제를 접근하는데 큰 어려움을 겪었다..
    같이 스터디하는 조원들도 다들 어려워했다.. 내일은 코플릿 마지막 자료구조 복습날인데 내일 문제는 또 어떻게 풀지 걱정이다 😩

  • cs50 강의
    알고리즘 문제를 풀다가 이 강의를 보니 한결 마음이 가볍긴했다. ㅋㅋ 기본적인 알고리즘에 대한 소개, 다양한 정렬방법 등 쉽게 설명해줘서 좋았다. 그러나 후반부 합병정렬은 아직 명확하게 이해가 안된다. 또 시간 복잡도 또한 개념은 이해했지만 다음주부터 문제를 풀 프로그래머스에 등장하는 시간복잡도에 맞게 코드를 작성 할 수 있을지 걱정이다.

  • CSS Grid
    프로젝트를 진행하면서 한번도 그리드를 이용해서 레이아웃을 작성해본적이 없다. 계속해서 플랙스를 이용해서 모든 레이아웃을 구성했는데, 그리드를 이용하면더 효율적으로 레이아웃을 작성할 수 있다고해서, 그리드 공부도 시작하게 되었다. (수업은 열심히 듣고 있지만 직접 만들지 않으면 체험히가 어렵겠지)
    그리드 하나를 배우는데도 꽤 많은 강의가 있다.. 얼른 수업을 다듣고 간단하게 레이아웃을 잡는 코드를 작성해봐야겠다. 뭔가 반응형 작업에 효과적일 것 같은 느낌적인 느낌


✍🏻TIL : cs50

오늘의 강의 🧑‍💻

2: 알고리즘 기초

Topic1: 입력한 자료를 출력하려면 어떤 과정이 필요할까요?

  • 알고리즘 : 알고리즘이란 입력값을 출력값의 형태로 바꾸기 위해서 어떤 명령들이 수행되어야 하는지에 대한 규칙들을 순서적 나열이다. 같은 출력값이라도 알고리즘적 순서 나열에 따라 출력값에 도달하는 시간이 다를 수 있다.

Topic2: 알고리즘을 이해하기 쉽게 표현하는 방법이 있을까요?

  • 의사코드(Pseudocode) : 프로그래밍 언어는 일반적으로 기계가 알아들을 수 있도록 명령을 하기위해 사용된 언어다. 알고리즘을 표현하는 방법으로는 자연어, 의사코드, 순서도 등이 있다. 의사코드는 프로그래밍 언어보다 문법적 제약을 적게 받아서 알고리즘 표현에 많이 사용된다.
    의사코드는 정해진 문법은 없다. 그러나 의사코드에서는 자주 사용되는 몇가지 요소가 있다. 반복문, 조건문을 포함하기도 한다. 의사코드는 문법 걱정 없이 알고리즘을 단계별로 표현할 수 있는 유용한 방법이기 때문에 프로그램의 논리를 이해하는데 효과적이다.

Topic3: 자료를 맨 처음부터 하나씩 비교하면서 찾는 방법은 무엇이라고 하나요?

  • 선형 탐색 : 선형탐색은 원하는 요소가 발견될 때까지 처음부터 마지막 자료를 차례대로 탐색한다. 그렇기 때문에 찾고자 하는 자료를 찾을때까지 모든 자료를 확인해야 한다. 선형 탐색 알고리즘은 정확하지만 비효율적이다. 자료의 크기가 n이면 최악의경우 n번만큼 실행해야한다. (찾고자 하는 자료가 가장 마지막에 있거 없을 경우 효율성이 아주 떨어진다.)
    선형탐색은 자료가 정렬 되어있지 않거나 어떠한 정보도 없어서 하나씩 찾아야하는 경우에 유용하다.


Topic4: 인접한 두개의 자료를 차례로 비교하면서 정렬하는 것을 무엇이라고 하나요?

  • 버블 정렬 : 버블 정렬은 두개의 인접한자료 값을 비교하면서 위치를 바꿔서 정렬하는 방식이다. 버블 정렬은 단 두개의 요소만을 정렬한다. 간단한 방법이지만 단 하나의 요소를 정렬하기 위해서는 많은 교환을 해야하는 일이 생길 수도 있다.

버를 정렬은 수행 한번만에 모든 원소가 정렬되지 않을 수 있다. n개의 요소를 정렬 해주기 위해서는 n-1번을 실행해야 한다. 최악의 경우는 최대한의 횟수를 실행해야해서 효울적이지 않다.


Topic5: 자료 중 가장 작은 것을 찾아 순서대로 정렬하는 방법은 무엇일까요?

  • 선택 정렬 : 선택정렬은 정렬을위한 알고리즘으로 배열안의 자료 중 가장 작은 수(혹은 가장 큰 수)를 찾아서 첫번째(또는 가장 마지막)의 수와 교환하는 방식의 정렬이다. 선택정렬은 교환 횟수를 최소하하는 반면 각 자료를 비교하는 횟수는 증가한다. 선택정렬로 정렬된 배열은 n-1번의 교환이 필요하다. 확실히 버블정렬의 교환횟수보다는 적지만 한 번의 교환이 일어나기 위해서는 정렬되지 않은 수의 모든 비교가 이루어져야해서 n²번의 비교가 필요하다. 선택정렬은 최선,최악의 경우 모두 수행하는 횟수만큼 비교와 교환을 해줘야한다.


Topic6: 정렬된 부분, 정렬되지 않은 부분 나누어 정렬하는 방법은 무엇일까요?

  • 삽입 정렬 : 삽입정렬은 자료가 정렬된 부분과 정렬되지 않은 부분으로 나눠진다. 정렬되지 않은 부분의 자료가 정렬된 부분의 자리로 삽입되는 형태의 정렬 방법을 말함. 삽입정렬은 자료의 양이 적을 때 성능이 뛰어나며, 자료 대부분이 이미 정렬되었을때 효율적이다. 삽입 정렬은 이미 정렬된 자료에 새로운 자료를 삽입해야 하는 경우가 발생하면, 정렬된 자료들이 자리를 이동해야 하기때문에 안정성이 낮음.


Topic7: 정렬 알고리즘의 효율성을 높이기 위해서는 무엇을 고려해야 할까요?

  • 시간 복잡도 : 시간 복잡도란 알고리즘의 수행시간의 효율성을 분석하는 것이다. 시간복잡도가 낮을수록, 연산자의 사용 횟수가 적을수록 효율성이 높은 알고리즘이다.

  • Big-O 표기법 : Big-O 표기법은 컴퓨터 과학에서 “대략”을 나타내는 공식적인 개념으로 최악의 경우에 대한 시간 복잡도를 나타내는 표현

  • Big Ω 표기법 : Big Ω (omega) 표기법이 있는데 Big Ω는 최선의 경우를 나타냄.


Topic8: 많은 자료를 분해하고 다시 합쳐 정렬하는 것을 무엇이라고 할까요?

  • 합병 정렬 : 합병 정렬(병합 정렬)은 원소가 한 개가 될 때까지 계속해서 반으로 나누다가 다시 합치면서 정렬해나가는 방식이다. (재귀적으로 구현)


Topic9: 정렬된 데이터에서 원하는 값 쉽고 빠르게 찾는 방법은 무엇일까요?

  • 이진 탐색 : 선형알고리즘을 사용하면 원하는 값을 찾기위해 배열 전체를 탐색해야한다. 그러나 이진 탐색을 사용하면 자료를 절반으로나눠서 찾는 값이 어느쪽에 있는지 파악해서 계속해서 범위를 절반으로 줄여나가는 탐색 알고리즘이다. (정렬된 배열에서만 가능하다)

  • 이진탐색 vs 선형탐색 : 이진 탐색은 일반적으로 선형 탐색보다 탐색의 속도가 짧지만, 배열을 정리하는 시간이 추가된다. 그래서 얼핏보면 선형적으로 배열을 탐색하는것이 더 빨라보이기도 하고, 상황에따라 선형탐생이 더 빠르기도 하다. 그러나 배열을 여러번 탐색해야하는 경우는 이진 탐색이 유용하게 사용된다.
    배열의 중간값을 기준으로 배열을 줄여나가기 때문에 많은양을 검색할때에는 이진탐색이 유용하다.

profile
코딩 배우는 아이

0개의 댓글