Computer Science

    Chapter 5. Classes and Interfaces

    파이썬은 inheritance, polymorphism, encapsulation 과 같은 기능을 제공하고, 클래스와 상속을 잘 사용하면 유지 보수가 용이하고, 기능의 확장에 있어 유연성을 발휘할 수 있다. Item 37: 여러 level의 buit-in type을 nesting하기보다는 클래스를 결합하라 파이썬의 내장 딕셔너리 타입을 사용하면 객체의 lifetime동안 동적인 내부상태를 유지할 수 있다. 예를 들어, 학생들의 점수를 기록하고, 학생의 이름을 미리 알 수 없는 상황이라면 딕셔너리에 이름을 저장하는 클래스를 정의할 수가 있다. class SimpleGradebook: def __init__(self): self._grades = {} def add_student(self, name): se..

    Chapter 4. Comprehensions and Generators

    Item 27: map과 filter 대신 Comprehensions를 써라 파이썬은 sequence나 iterable로부터 새로운 list를 만드는 간결한 syntax를 제공하고, 이를 list comprehensions라고 부른다. a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] squares = [] for x in a: squares.append(x**2) print(squares) >>> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 위와 같이 a의 원소들의 제곱의 값을 가지는 list를 만들어낼 수 있다. 이를 list comprehension을 이용하면 훨씬 간결하게 구현이 가능하다. squares = [x**2 for x in a] # List com..

    Chapter 3. Functions

    Item 19: 3개보다 많은 return value를 unpack 하지 말 것 unpacking syntax의 효과 중 하나는 python의 함수가 여러 개의 값을 return 할 수 있게 해주는 것이다. def get_stats(numbers): minimum = min(numbers) maximum = max(numbers) return minimum, maximum lengths = [63, 73, 72, 60, 67, 66, 71, 61, 72, 70] minimum, maximum = get_stats(lengths) # Two return values print(f'Min: {minimum}, Max: {maximum}') >>> Min: 60, Max: 73 위처럼 동작이 가능한 이유는, ..

    Chapter 2. Lists and Dictionaries

    Item 11: Sequence를 슬라이스 할 줄 알자 a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] a[:] # ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] a[:5] # ['a', 'b', 'c', 'd', 'e'] a[:-1] # ['a', 'b', 'c', 'd', 'e', 'f', 'g'] a[4:] # ['e', 'f', 'g', 'h'] a[-3:] # ['f', 'g', 'h'] a[2:5] # ['c', 'd', 'e'] a[2:-1] # ['c', 'd', 'e', 'f', 'g'] a[-3:-1] # ['f', 'g'] 인덱스를 생략하는 것은 처음과 끝을 의미하는 것이고, 마이너스(-)가 붙은 건 뒤에서부터 몇번째 원소인지..

    Chapter 1. Pythonic Thinking

    Item 1: 파이썬 버전 몇을 사용하고 있는 지 알고 있을 것. - Python2 사용하지 말 것. - python version을 잘 확인할 것. $ python --version 또는 runtime 중에도 sys module 사용하여 확인 가능 import sys print(sys.version_info) print(sys.version) Item 2: PEP8 스타일 가이드를 따르자. PEP는 Python Enhancement Proposal의 줄임말로, 파이썬 개발자들 사이에서는 통상적으로 지켜지는 룰이므로 이를 따르는 것이 좋고, 뿐만 아니라 나 혼자 해당 코드를 사용한다 하더라도 높은 유지보수성과 가시성을 위해서는 따르는 것이 좋다. Whitespace - tab 대신 space 쓸 것 - ..

    (C++) 백준 1012번 [유기농 배추]

    바로 지난번에 풀었던 문제가 DFS와 BFS 문제였는데, 이번에 바로 BFS개념을 활용할 수 있는 문제를 골라보았다. 1. 문제 해결방법 구상 위의 문제 설명을 풀어보면, 결국은 1로 이루어진 덩어리의 개수가 몇 개인지 파악하는 문제이다. 덩어리에는 배추가 하나가 있을 수도, 두 개, 혹은 여러 개가 있을 수도 있다. 덩어리를 파악하기 위해서는 BFS를 사용하는 것이 가장 효율적이므로 BFS를 선택했다. 배추밭의 첫 모퉁이부터 끝 모퉁이까지 훑어가면서 BFS를 시행할 수 있는 조건이면 BFS를 시행하고 아닌 경우 넘어간다. BFS를 시행할 수 있는 조건이라면 (1) 해당 배추밭 영역을 방문하지도 않았어야 하고 (2) 해당 영역에 배추가 있어야 한다. (배추가 없으면 덩어리를 파악할 이유도 없으므로) 2...