190423-TIL

Today I Learned

오늘 한 일

  • Big-O notation을 다시 한 번 정리하며 성능순으로 정리했다.
  1. O(1) : 상수 시간
    • 엄청 빠름
    • array의 indexing, linked list의 insert, delete
  2. O(logn) : 로그 시간
    • Binary Search Tree의 insert, search, delete
  3. O(n) : 선형 시간
    • linked list의 search, 특정 array의 insert, delete
  4. O(nlogn) : 선형 로그 시간
    • quicksort, merge sort
    • comparision sorting의 경우 quick sort보다 성능 좋을 수 없다.
  5. O(n2) : 지수시간(?)
    • bubble sort, select sort, insert sort 등
  • Memory | Performance of fbstring

    Memory에 관련된 영상 하나를 보고 Memory 공부를 했다. Performance of fbstring

    나는 전공 수업에서 OS를 들으며 배웠던 내용이라, 그 때 배웠던 것들을 처음부터 정리하며 복습 했다.

  • Process and Thread

    어렵고 다룰 게 많은 주제인데 한 번에 후다닥 나가는 느낌이라 아쉬웠다. OS를 복습할 겸 Chapter 별로 정리해 포스팅할 계획을 세웠다.

  • Process와 Memory 개념 정리

  • Codewars 5kyu Sum of Pairs 문제를 풀었다. 자꾸 Timeout이 나서 성능을 좋게 만들려고 최대한 노력했다.

190422-TIL

Today I Learned

오늘 한 일

  • Python Functions(호출 방식, stack, map filter 등)을 배우고 posting으로 정리했다.

  • LeetCode 알고리즘을 풀고, 알고리즘 스터디를 했다.

190421-TIL

Today I Learned

LeetCode 5. Longest Palindromic Substring

금요일부터 오늘까지 내내 나를 괴롭히던 문제를 해결(?) 했다. 시간을 많이 들여도 도저히 답이 나오지 않으면 포기하기보다 다른 사람들의 Solution을 보고 분석하는 것 또한 공부라고 생각한다.

Python에 익숙해질겸, Dynamic Programming을 재정리할겸 여러 시도를 해보았지만 내가 생각하지 못한 기발한 방법으로 문제를 해결한 사람들이 많았다.

190420-TIL

Today I Learned

Sass 특강

  • 임기완 강사님의 Sass 특강을 들었다.

  • Sass는 CSS의 preprocessor이다.

    Preprocessor란, 컴파일러와 같이 자신의 input data로 만들어낸 ouput data가 다른 프로그램의 input data가 되게끔 하는 프로그램을 말한다.

  • scss 를 css로 변환하는 방법과, variable, partial, import, mixin, @extend를 이용한 inheritance, data type 등 전체적인 부분을 훑어봤다.

  • HEXO로 블로그를 하기 위해서 살펴보았던 .ejs 나 .jade 파일에서 보았던 이상한 문법들이 이해가 되는 순간이었다! mixin이 많은 도움이 될 것 같다.

🐊 구닥다리 공룡을 위한 오늘날의 CSS

알고리즘

  • CodeWars Directions Reduction 문제를 풀었다.

😈 알고리즘 풀이 보러가기

190419-TIL

Today I Learned

오늘 한 일

새로운 언어를 배우는 방법

  1. 자료형
  2. 연산자
  3. 제어문, 반복문
  4. 함수
    • call by reference, call by value, call by object reference
    • First class function인지
  5. Class 지원하는지 (
    • Encapsulation
    • Inheritance
    • Virtual function 지원 여부)

Python Data Type과 기본 Data Structure 실습

Text 가위바위보 게임

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import random

def get_player_choice():
"""
get_player_choice() -> string
Return "바위" or "가위 or "보"
"""
choice = input("가위바위보! : ")
while choice != "가위" and choice != "바위" and choice != "보":
choice = input("가위바위보! : ")
return choice

def get_computer_choice():
"""
get_computer_choice -> string
Return "바위" or "가위 or "보"
"""
tup = ("가위", "바위", "보")
return tup[random.randint(0,2)]

def who_wins(player, computer):
"""
who_wins(player, com) -> string
Return if player wins 'player'
elif computer wins 'computer'
else None
"""
if player == computer:
return None
if (player == "바위" and computer == "가위") or\
(player == "가위" and computer == "보") or\
(player == "보" and computer == "바위"):
return 'player'
else:
return 'computer'

def play_one():
"""
play_one -> string
Return if player wins 'player'
elif computer wins 'computer'
"""
player_win = 0
computer_win = 0
while player_win == computer_win:
player = get_player_choice()
computer = get_computer_choice()
result = who_wins(player, computer)
print(f'Player {player} vs Computer {computer}')
if result == 'player':
player_win += 1
elif result == 'computer':
computer_win += 1
if player_win > computer_win:
return 'player'
else:
return 'computer'

def check_final_winner(result):
"""
check_final_winner(result) -> string
result : ex) ['player', 'player']
Return if 'player' >= 2 in result, 'Player'
elif 'computer' >=2 in result, 'Computer'
else None
"""
print(f"Player {result.count('player')}승 | Computer {result.count('computer')} 승")
if result.count('player') >= 2:
return 'Player'
else:
return 'Computer'

def play():
"""
play() -> None
3판 2선승가위바위보
"""
result_list = []
for i in range(3):
result_list.insert(i, play_one())
print(check_final_winner(result_list)+" Wins!!")

if __name__=="__main__":
play()

ASCII와 UNICODE

ASCII와 UNOCODE의 역사, UNICODE의 Encoding, Decoding 방법도 배웠다.

Python Bubble Sort

1
2
3
4
5
6
7
8
9
10
11
def bubble_sort(li):
n = len(li)
for i in range(n-1):
for j in range(n-1-i):
if li[j] > li[j+1]:
li[j], li[j+1] = li[j+1], li[j]

if __name__ == "__main__":
li=[6, 2, 1, 4]
bubble_sort(li)
print(li)

간단한 Bubble Sort function을 만들었다.

알고리즘

CodeWars 6kyu. Persistent Bugger

그리고 LeetCode의 Medium Level 문제를 풀려고 했는데 Dynamic Programming 개념이 들어가 쉽지 않다. 주말 내내 풀어야겠다.

190418-TIL

Today I Learned

오늘 한 일

  • Epsilon, Number Digit 등 컴퓨터에서 실수를 표현하는 방식과 상대오차에 대해서 깊게 배웠다.

  • 실수형의 논리비교를 위한 is_equal 함수를 만들었다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function is_equal(x, y, allowed=0){
    // 둘 중 큰 수의 다음 숫자와의 오차의 allowed 배 정도 되는 범위 안에 있으면 같다고 판단한다.
    return (Math.abs(x-y) <= Math.max(Math.abs(x), Math.abs(y))*Number.EPSILON*Math.pow(2, allowed));
    }
    function main(){
    var sum = 0;
    for(var i =0; i< 100; i++){
    sum += 0.01;
    }
    if(is_equal(sum, 1.0, 2)){
    console.log("THE SAME");
    } else{
    console.log("NOT THE SAME");
    }
    }
  • Python을 배우는데 너무 재미있다. 익숙하지 않아 찾아보는 것이 번거롭지만 문법이나 기능이 흥미롭다.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×