Local Variable and Global Variable

전역변수 (global variable) / 지역변수 (local variable)

  1. 변수의 scope와 lifetime
  • 변수는 선언하는 순간부터 속한 scope 내에서 lifetime을 가진다. 즉, 특정 범위의 코드가 실행되고 있을 때는 메모리에 존재하지만, 실행이 끝나면 이 변수는 메모리에서 사라진다.
  1. 변수의 선언 위치

    a. Block 외부 : block({})으로 감싸진 main 함수와 여러 함수들의 외부 공간에 변수를 선언할 수 있다.

    b. Block 내부 : block 내부에 변수를 선언할 수 있다. C는 block의 최상단에 모든 지역변수를 선언해야한다.

    c. 함수의 parameter : 함수의 매개변수는 그 함수의 block 내에서 선언된 변수와 동일한 효과를 갖는다.

  2. 전역변수 (a case)

  • Block 외부에 선언되는 변수. 전역 변수는 프로그램이 시작되는 순간부터 종료되는 순간까지 메모리를 차지하고 있으며 사라지지 않는다.

  • C라면 main() 위, #include <stdio.h>와 함수 원형 밑 그 사이에 선언

  • 전역변수는 어느 block에서도 언제든지 접근이 가능하다 > sycncrinize 고려

  1. 지역변수 (b case, c case)
  • 지역변수는 block 내부에서 선언되는 변수이다. { } 안에 선언되어있다면 무조건 지역변수

  • 지역변수는 선언된 block 내부로 scope가 한정되며 그 block의 실행이 끝나면 lifetime 또한 소멸된다.

  • 함수의 parameter로서 선언되는 local variable도 이와 같다. 함수 body 내에서 선언되는 것과 똑같다.

LeetCode 5. Longest Palindromic Substring

LeetCode 5. Longest Palindromic Substring

가장 긴, 거꾸로 해도 똑같은 Substring을 찾는 문제

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 문제를 풀었다.

😈 알고리즘 풀이 보러가기

CodeWars 5kyu. Directions Reduction

CodeWars 6kyu. Dubstep

뒤죽박죽 방향 지시를 효율적으로 만들기

CodeWars 6kyu. Persistent Bugger

CodeWars 6kyu. Persistent Bugger

각 자릿수의 곱이 한자릿수가 되는 횟수를 구하기

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 개념이 들어가 쉽지 않다. 주말 내내 풀어야겠다.

Python Data Type and Data Structure | Jupyter 사용방법

Jupyter 사용법 | Python Data Type

Jupyter notebook

  1. window 사용을 기준으로 Window PowerShell을 실행한다.

  2. pwd로 현재 폴더를, ls로 현재 폴더에 존재하는 file들을 확인 후 mkdir 폴더이름 command로 python file을 만들고 실습할 폴더 하나를 생성한다.

  3. 나는 python-basic이라는 폴더를 만들고 cd python-basic 명령으로 해당 폴더로 이동했다.

  4. 만든 폴더로 이동한 후 cmd에 jupyter notebook command를 입력한다.

    PowerShell에 jupyter notebook 입력

  5. 조금 기다리다보면 (10초 이상 소요) 브라우저 새 창으로 jupyter notebook이 실행된다.

    jupyter notebook 실행화면

  6. 그림과 같이 우측의 new button을 눌러 새로운 python file을 생성한다.

    create new python file

  7. 그럼 새로운 탭에 생성된 file이 보여진다.

    untitled.ipynb

  8. 제목을 수정하고 실습을 시작하면 된다!

  • method 이름을 치고 Shift + Tab을 하면 function의 signature를 확인할 수 있다.

    function signature 확인 단축키 : shift + tab

  • object (variable)을 입력한 상태에서 Tab 키를 누르면 사용 가능한 method들을 확인할 수 있다.

    method 확인 단축키 : tab

  • instruction을 작성한 후 Shift + Enter를 누르면 해당 line이 실행된다.

  • 어떤 line에 focus가 있는 상태에서, ESC + m을 누르고 Enter를 치면 markdown으로 작성할 수 있다.

Python Data Type

  1. Number Type : Int, Float

    Python Number Type

    javaScript와 다르게 C처럼 int, float등 정수형과 실수형을 구분한다.

  2. String

  • character와 string의 구분 없이 str type을 가진다.

String

Python Data Structure

Mutable and Immutable Object

Mutable object (변경 가능 객체)

  1. list
  2. dictionary
  3. set

Immutable object (변경 불가능 객체)

  1. int, float 등 숫자는 immutable : 값을 덮어쓰는 것이 아니라 새로운 memory 공간에 할당하고 그 값을 가리킨다. 이름 객체가 값 객체를 가리키는 것을 binding이라고 한다.
  2. string
  3. Tuple

Dynamic Typing

Dynamic Typing

Python은 Dynamic typing 언어로, C / C++ 같은 정적 타이핑 언어처럼 자료형을 미리 선언하지 않아도 알아서 동적으로 자료형을 할당할 수 있다.

Data Assignment

Memory Assignment (C / Python)

  • C : char a = 10;
    • A라는 이름을 가진 공간에 10의 값이 저장된다.
    • 20으로 변경시 같은 메모리 공간의 값을 변경한다.
  • Python : a = 10;
    • 10이라는 값을 가진 객체가 생기고, a라는 이름을 가진 객체가 10을 가리키게 된다.
    • 만약 a=20으로 재할당할 경우 20이라는 값을 가진 객체가 생기고 a는 20을 가리켜, 10은 자신을 가리키는 객체가 없으므로 제거된다.
    • 20으로 변경시 10의 메모리공간을 건드리지 않고 새로운 공간을 만든다.
  • Integer, float등 number type은 immutable 객체

Python 성질

  1. 모든 것이 객체
    : integer가 그냥 4 byte가 아니라 객체로 필요한 것들이 붙어있어 크기를 더 차지함
  2. Overflow
    : overflow 되는 대신 4 byte를 8 byte로 늘림. 대신 경계검사 하므로 속도 저하

Language Abstraction

  • Hardware 의존적인 Assembly 언어에서 벗어나 하드웨어 독립적인 C언어로 Coding하고 각 하드웨어 별 어셈블러로 해석하게끔 함 ▶ 하드웨어 추상화 (각 어셈블러가 어떻게 동작하는지 몰라도 C로 코딩하면 됨)
  • Assembly : low level language
  • C / C++ : hardware abstraction 됐으나 memory abstraction X ▶ 메모리를 직접 할당, 해제
  • Java / C# : 언어 자체에서 메모리 할당, 해제 ▶ garbage collection. Memory abstraction O 그러나 Data Type은 선언해줘야함
  • Python / javaScript : Data type abstraction. Interpreter Language
  • Level은 abstraction level을 말하는 것이지 급을 나누는 것이 아님
  • 성능은 C/C++ 생산성은 Python

Python 3.7.3 | Jupyter 설치

Window Python 3.7.3 및 Jupyter 설치

파이썬을 공부하기 위해 작업환경을 우선 구축하기로 한다.

Python 3.7.3 설치

  1. Python 최신 릴리즈인 3.7.3 다운로드 페이지로 이동한다.

www.python.org/download

  1. Download for Windows의 Python 3.7.3 버튼을 누르면 자동으로 설치 실행 파일이 다운로드 된다.

  2. 다운받은 python-3.7.3.exe 파일을 관리자 권한으로 실행 후, 설치를 진행한다. PATH를 자동으로 생성하는 것이 좋다!

  3. 다운로드가 완료되면 cmd 창을 열어 python --version 명령어로 설치가 제대로 되었는지 확인한다.

    python 설치 확인

Jupyter 설치

위의 Python 설치 4단계에서, cmd 명령으로 확인을 정상적으로 마쳤다면 추가적인 명령 한 줄로 Jupyter를 설치할 수 있다.

  1. cmd 창에 pip install jupyter를 입력한다.
    jupyter 설치

여기까지 하면 Python 사용을 위한 간단한 작업 환경 구성이 완료된다.

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

×