첫날이다보니 개념의 필요성을 주입당한 느낌이 있지만 틀린말은 없었고 아무리 합리적으로 생각해도 반드시 필요한 개념들이라 생각해서 알고리즘에 관한 글은 아니지만 적기로 마음 먹었다.
컴퓨팅 사고
"자신의 사고 과정을 보여주는 거울" 라는 글을 보았고 컴퓨팅사고에 대한 완벽한 글이라는 생각이 들었다.
나도 사고를 output을 통해 언제든 확인하고 수정하고 발전해내가는 그 모습을 실시간으로 볼 수 있는 행위라고 생각했었다. 저 짧은 글로 내 비효율적으로 긴 글을 대체하고도 여운이 남게 만든다.
아래의 5개의 분야를 통해 컴퓨팅 사고의 중요성을 알렸다.
분해
패턴 인식
추상화
알고리즘 디자인
자동화
지금 중요한 건 알고리즘 디자인이고
여기서 공간 복잡도와 시간 복잡도에 대한 설명을 들었다.
공간 복잡도
프로그램을 실행 및 완료하는데 필요한 메모리(공간)의 양
현대 사회에서는 크게 발전된 하드웨어들 덕에 걱정할 필요가 없지만 제한을 통해 무슨 알고리즘을 사용해야하는지 유추가 가능하다라는 점을 배웠다
시간 복잡도
성능/시간에 많은 영향을 주는 부분에 대해 시간 예측
ex) 반복문안에 반복문이 있으면 성능/시간에 많은 영향을 줌
빅오메가 : 최선
빅세타 : 평균
빅-오 : 최악의 경우
특히 빅오표기법은 최악을 나타내는 표기하는 것으로 최악을 비교하며 무엇이 더 최선인지 알 수 있다.
<알고리즘 기초 풀이>
아래의 문제들을 풀었고 각 풀이에 기억에 남는 코드는 따로 github에 정리해두었다.
https://github.com/1489ehdghks/python_algorithm/tree/main/%EA%B8%B0%EC%B4%88
각도기.py
나머지 구하기.py
나이출력.py
두 수의 나눗셈.py
두수의 곱.py
두수의 차.py
몫 구하기.py
배열 뒤집기.py
배열의 평균값.py
숫자 비교하기.py
중복된 숫자 개수.py
짝수의합.py
<튜터님들의 답변>
Q1.알고리즘을 사용했을때 어떤 방식을 주로 사용했엇는지 여쭈어봄
from collections import deque
from itertools import combinations, permutations
을 자주 사용했고 기억에 남는다고 하심.
Q2.실제 업무에서 github에 readme에 올렸을 때 반드시 필요한 내용들에 대해 여쭈어봄.
서버 구동 방법
명령어 구동
몇번 주소에서 확인해야함
어떤 기능이 포함 되어있는지
어떤 것들 사용했는지 툴 느낌.
Q3. 매직메소드 호출
dir <- 이건 여러번 물어본 것 같아서 물어볼 떄도 죄송스럽다.
Q4. 반복문을 1회 진행할때마다 디버깅을 진행하고 싶습니다.
1.중복된 숫자 갯수 파일 우클릭 하고 디버그 어쩌구 누름
2.원이 있는 부분을 중단점이고 체크한 후 왼쪽 하단부에서의 체크된 부분을 클릭하면 반복문을 타고 값이 1회 출력된다.
result값이 1로 변화함.
3. 3차례 더 진행.result값이 4가 되었고 원하는 답
이 나옴.