본문 바로가기

전체 글

(76)
[Javascript] 객체 Javascript는 객체지향(기반) 언어 자바스크립트를 구성하는 대부분은 객체로 구성되어 있다. 원시타입(문자열, 숫자 등)은 불변의 특징을 가지고 있으며, 이와 반대로 객체는 변한다는(mutable) 특징을 가지고 있다. 그렇다면 원시타입 변수를 불변으로 만들어야 할 필요가 있을까? 그 이유는, 값을 그 자리에서 바꿔버리게 되면 나중에 잘못되었을 때 어디서 잘못되었는지 추적하기가 어려워진다. 따라서 불변으로 새로운 주소에 값을 주어, 추적하기 쉬워진다. 정리하자면 값이 바뀌게 되는 이력을 추적하기 좋기 때문이다. 객체는 왜 mutable한 특성으로 만들었을까? 객체의 경우 원시타입보다 크기가 크고, 이를 불변으로 하게 되면 메모리의 효율성이 떨어지기 때문이다. Javascript의 객체 (객체 lit..
[파이썬 알고리즘 인터뷰] 2부 5장 리스트, 딕셔너리 리스트 - 순서대로 저장하는 시퀀스이자 변경 가능한 목록 - 입력 순서가 유지되며, 내부적으로 동적 배열로 구현 - 매우 다양한 기능 제공 - 리스트를 사용하면 스택과 큐의 사용 유무를 고민하지 않아도 됨 - 스택과 큐에서 사용 가능한 모든 연산 제공 O(1)에 실행 가능한 연산들 - 리스트 마지막 요소를 .append( )로 추가, - 리스트의 마지막 요소를 pop( )으로 추출, - 원하는 인덱스 조회하는 연산 ( * 요소를 삭제하거나 큐의 연산이기도 한 첫 번째 요소를 추출하는 pop(1)은 O(n)에 해당 ) - 리스트에 큐의 연산을 사용할 때는 주의가 필요함 - 데크(Deque)와 같은 자료형으로 성능을 높일 수 있음 리스트의 주요 연산 시간 복잡도 연산 시간복잡도 설명 len(a) O(1) 전..
[클린코드] 의미 있는 이름 의도를 분명히 밝혀라 변수(혹은 함수나 클래스)를 나타낼 때, 의도를 드러나는 이름을 사용하면 좋음 // 아무 의미도 드러나지 않은 변수명 int d; //경과 시간(단위: 날짜) // 의도가 드러나는 변수명 int elapsedTimeInDays; int daySinceCreation; int daysSinceModification; int fileAgeInDays; // 코드가 하는 일이 짐작하기 어려운 코드 // 코드의 맥락이 코드 자체에 명시적으로 드러나지 않은 코드 public List getThem(){ List list1 = new ArrayList(); for (int[] x : theList) if (x[0] == 4) list1.add(x); return list1; // 정보 제공이 ..
[클린코드] 깨끗한 코드 깨끗한 코드란? - 세세한 사항까지 꼼꼼하게 처리하는 코드 - 한가지에 '집중'하려는 코드 (각 함수와 클래스와 모듈은 주변 상황에 현혹되거나 오염되지 않음) - 단순하고 직접적인 코드 - 잘 쓴 문장처럼 읽힘 (가독성) - 설계자의 의도를 숨기지 않고 명쾌한 추상화와 단순한 제어문으로 가득함 - 반드시 필요한 내용만 담고, 추측이 아닌 사실에 기반한 코드여야 함 - 다른 사람이 고치기 쉬운 코드 - 케이스 주도 개발 (테스트 케이스가 있는 코드) - 주의 깊게 짜인 코드 - 모든 테스트 케이스를 통과한 코드 - 중복이 없는 코드(중복 줄이기) - 시스템 내 모든 설계 아이디어를 표현한 코드(표현력 높이기) - 클래스, 메서드, 함수 등을 최대한 줄인 코드(초반부터 간단한 추상화 고려하기) 나쁜코드 - ..
[파이썬 알고리즘 인터뷰] 2부 4장 빅오, 자료형 빅오( big - O ) - 입력값이 무한대로 향할때 함수의 상한을 설명하는 수학적 표기 방법 - 입력값이 커질 때 알고리즘의 실행 시간(시간 복잡도)과 함께 공간 요구사항(공간 복잡도)이 어떻게 증가하는지 분류하는 데 사용 - 점근적 실행 시간을 표기할 때 사용하는 수학적 표기법 * 점근적 실행 시간 : 입력값 n이 무한대로 커질 때, 함수의 실행 시간의 추이를 의미함 시간 복잡도(점근적 실행시간) - 어떤 알고리즘을 수행하는 데 걸리는 시간, Computational Complexity - 빅오로 시간 복잡도를 표현할때, 최고차항만 표기, 계수는 무시 - 예를 들어, 4n^2 + 3n + 4의 시간 복잡도는 O(n^2) - 공간복잡도를 표현하는 데에도 사용 - 시간과 공간이 트레이드오프 관계 - 실행..
[파이썬 알고리즘 인터뷰] 2부 3장 파이썬 인덴트 파이썬의 인덴트는 공백 4칸을 원칙으로 하고 있음 * 파이썬 PEP - 파이썬의 개발은 파이썬 개발 제안서(PEP) 프로세스를 통해 진행됨 - PEP 프로세스 : 새로운 기능을 제안하고 커뮤니티의 의견을 수렴하여 파이썬의 디자인 결정을 문서화하는 주요 개발 프로세스임 - 대표적인 파이썬 스타일 가이드인 PEP8이 있음 네이밍 컨벤션 파이썬의 변수명 네이밍 컨벤션은 각 단어를 밑줄로 구분하여 표기하는 스네이크 케이스를 따름 스네이크 케이스 - 각 단어를 언더스코프(_)로 구분, 일반적으로 소문자로 표기(경우에 따라서는 대문자로 표기) - 파이썬의 PEP 8을 통해 - 스네이크 표기법 코딩에 대한 질문시, 파이썬의 PEP 8 철학에 따라 스네이크 코딩 지향 리스트 컴프리헨션 - 기존 리스트를 기반으로..
[백준] 14499번_주사위 굴리기 (Python/파이썬) https://www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지 www.acmicpc.net 문제 크기가 N×M인 지도가 존재한다. 지도의 오른쪽은 동쪽, 위쪽은 북쪽이다. 이 지도의 위에 주사위가 하나 놓여져 있으며, 주사위의 전개도는 아래와 같다. 지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다. 2 4 1 3 5 6 주사위는 지도 위에 윗 면이 1이고..
[자료구조] 트리(Tree) 트리(Tree) 계층적인 구조를 표현할 때 사용 루트 노드 : 부모가 없는 최상위 노드 단말 노드 : 자식이 없는 노드 크기 : 트리에 포함된 모든 노드의 개수 깊이 : 루트 노드부터의 거리 높이 : 깊이 중 최댓값 차수 : 각 노드의 간선 개수 트리의 크기가 N일 때, 전체 간선의 개수는 N - 1개 이진 탐색이 동작에 효율적임 이진 탐색 트리의 특징 : 왼쪽 자식 노드 < 부모 노드 < 오른쪽 자식 노드 (부모 노드보다 왼쪽 자식 노드가 작음, 부모 노드보다 오른쪽 자식 노드가 큼) 트리 순회 방법 전위 순회 : 루트 먼저 방문 중위 순회 : 왼쪽 자식 방문 뒤 루트 방문 후위 순회 : 왼쪽 - 오른쪽 - 루트 class Node: def __init__(self, data, left_node, ri..