컴퓨터 알고리즘 2023-03-15 수업정리
Flow Divide and Conquer - Binary Search Divide and Conquer - Merge Sort Divide and Conquer - Binary Search Binary Search(이진 탐색) 오름차순으로 정렬된 크기 n의 배열에 찾고자 하는 key값 x의 위치를 특정한다. 항상 중간값과 비교하여 x값이 중간값이라면 그 값의 index를 반환하고 key 값이 중간값보다 작다면 중간값 기준 왼쪽의 subarray에 대하여 Binary Search, key값…
소프트웨어시스템설계 2023-03-15 수업정리
Flow Refactoring (2) Refactoring Example 아래의 UML과 코드들은 리펙토링을 하기 이전의 원본 상태이다. Original UML Original Code - Run Customer customer1 = new Customer("David"); Movie movie1 = new Movie("Madagascar", Movie.CHILDRENS); Rental rental1 = new Rental(movie1, 6); Movie…
운영체제 2023-03-15 수업정리
Flow System Call Operating System Structure System Call Operating-System Services User mode에서 실행되는 프로그램이 자원 할당, 처리 요청 등 Kernel의 서비스를 이용할 경우 System Call을 사용한다. User mode에서의 요청인 System Call이 발생하면 운영 체제는 이를 처리해 준다. 당연하지만 운영체제마다 제공하는 System Call API는 모두 다르다. 같은 역할을 하더라도 이름이나 구현…
프로그래밍언어론 2023-03-14 수업정리
Flow 컴파일러, 인터프리터, 하이브리드 방식의 Implementation FORTRAN(1957) LISP(1959) Implementation 컴파일러 방식 인터프리터 방식 Hybrid 방식 서로 다른 ISA를 지원하는 하드웨어에서 작동하는 VM을 통해 인터프리터 방식의 Programming Language구현이 가능하다. 대표적으로 Java의 byte code가 있다. Java에서의 VM은 JVM이 된다. FORTRAN(1957) FORTRAN은 초기 과학 연산 등에 사용되…
컴퓨터 알고리즘 2023-03-13 수업정리
Flow Big $O$, Big $\Theta$, Big $\Omega$ Big $O$, Big $\Theta$, Big $\Omega$ Big $O$ 주어진 복잡도 함수 f(n)에 대하여, n이 임의의 수 N 보다 크거나 같을 때, g(n)이 f(n)에 어떠한 상수 c를 곱한 것보다 작거나 같다면 아래와 같이 표현한다. 그리고 g(n) is oh of f(n) 이라고 읽는다. $$g(n) \leq c * f(n),\ g(n) \in O(f(n))$$ 임의의 수 N보다 n이 커야 한다는…
소프트웨어시스템설계 2023-03-13 수업정리
Flow UML Refactoring (1) UML(Unified Modeling Language) UML basic elements UML은 특정 언어의 모델링만 하는 것이 아니므로, attribute, operation등 포괄적인 단어를 사용한다. Refactoring 변수명, 메소드명, 클래스명이 requirement단계의 이름과 일치해야 한다. 응집성 문제가 없어야 한다. 하나의 메소드는 하나의 역할만을 해야 한다. 이렇지 않을 경우 응집성이 높아져 code smell이 발…
운영체제 2023-03-13 수업정리
Flow Storage Computer System Architecture 운영 체제는 무엇을 하는가? 운영 체제 설계의 목표 Storage 주 메모리인 메인 메모리(휘발성), secondary storage인 비휘발성 storage가 존재한다. 아래와 같은 계층 구조를 가진다. 그림에서 레지스터와 캐시는 운영 체제에서 관리하지 않는다. 운영 체제에서 관리하는 메모리 영역은 메인 메모리부터 2차 저장소 까지의 영역이다. I/O Device 일반적인 컴퓨터의 구조는 아래와 같이 나타낼 …
2579 - 계단 오르기
난이도: 실버 3 날짜: 2023년 3월 12일 상태: Correct 추가 검토 여부: No 알고리즘 : Dynamic Programming Solution 처음 문제를 읽고 동적 프로그래밍 문제인 지 바로 인식하지 못해 문제 풀이에 시간이 걸렸다. 1칸, 2칸, 3칸, 4칸에 대하여 가능한 경우의 수를 손으로 직접 그려보니 동적 계획법 문제인 것이 바로 인식되었다. 경우를 나누어 배열을 초기화했다. n번째 계단에 도착했을 때 직전 계단에 이어 연속해서 밟는 경우 n번째 계단에 도착했을 때…
1992 - 쿼드트리
난이도: 실버 1 날짜: 2023년 3월 11일 상태: Correct 추가 검토 여부: No 알고리즘 : 분할 정복, 재귀 Solution compressable함수를 구현하여 2차원 배열의 모든 원소가 같은 원소로 구성되어있는지 확인한다. 하나라도 다른 원소가 포함되어 있다면 false를 반환한다. compress함수를 구현하여 recursion을 통해 입력된 배열에 대해 compress를 수행한다. 만약 모든 원소의 값이 같지 않아서 압축이 되지 않을 경우, 4분할을 통해 comp…
1931 - 회의실 배정
난이도: 실버 1 날짜: 2023년 3월 10일 상태: Correct 추가 검토 여부: No 알고리즘 : 그리디 알고리즘 Solution 모든 선택에 있어서 선택 가능한 선택지 중 끝나는 시간이 가장 빠른 회의를 선택한다면 가장 많은 회의를 진행할 수 있게 된다. 이를 알고리즘으로 쉽게 구현하기 위해 pair를 사용했다. 끝나는 시간이 빠른 것을 선택해야 하므로 끝나는 시간을 pair.first로 설정한다. 이렇게 하면 sort를 이용해 원하는 상태로 한번에 정렬이 가능하다. 이전에 끝난 …
프로그래밍언어론 2023-03-09 수업정리
Flow 프로그래밍 언어의 평가기준(속성) 프로그래밍 언어 설계의 trade-off Programming Languages as Virtual Computers 프로그래밍 언어의 구현 방법 프로그래밍 환경 프로그래밍 언어의 속성 Writability - 프로그램을 쉽게 구현할 수 있는가? Readability - 가독성이 높은가? Efficiency - 컴파일 시간이 오래 걸리지는 않는가?(효율적인가?) Reliability - 신뢰성 Portability - 이식성 -> 여러 플랫폼…
소프트웨어시스템설계 2023-03-08 수업정리
Flow 리펙토링이란? Eclipse Refactoring 리펙토링이란? Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing tis external behavior Martin Fowler, 1999 코드를 외부 동작의 변화 없이 내부 구조만 바꾸는 것 결과적으로 유지보수성과 가독성을 높이는 역할을 한다.…
컴퓨터 알고리즘 2023-03-08 수업정리
Flow 알고리즘이란? Recursion 알고리즘의 분석 알고리즘이란? 문제(problem)는 "정답을 요구하는 질문"이다. 배열을 크기 순으로 정렬해라 값 x가 배열 S에 존재하는지 판단해라 25번째 피보나치 수열은? 알고리즘은 "target computer"에서 소프트웨어 개발자가 주어진 입력에 대한 출력을 생성하기 위해 작성한 "logic" 이다. 알고리즘에서 중요하게 여겨지는 요소는 아래와 같다. Correctness Co…
운영체제 2023-03-08 수업정리
Flow 운영 체제의 정의 및 primary components 컴퓨터의 부팅 과정 System Call Virtualization Persistence 운영 체제의 정의 & primary components 현대 컴퓨터 시스템은 사용자, 소프트웨어 영역, 운영 체제, 하드웨어 영역으로 나눌 수 있다. 운영 체제는 소프트웨어 어플리케이션이 하드웨어 자원을 효율적으로 사용할 수 있도록 하는 소프트웨어이다.(제한된 HW자원을 효율적으로 프로세스에 할당한다.) resource alloca…
프로그래밍언어론 2023-03-07 수업정리
Flow 프로그래밍 언어의 역할 프로그래밍 언어에 대해 공부해야 하는 이유 수많은 프로그래밍 언어를 어떻게 다루어야 하나? Requirements & Constraints 프로그래밍 언어에 대한 평가 프로그래밍 언어의 역할 사람과 기계 사이의 의사 소통이 가능하게 한다.(단방향) 사람과 사람 사이의 의사소통이 가능하게 한다.(양방향) 다른 사람이 본인의 코드를 쉽게 이해할 수 있다. 프로그래머가 프로그램을 쉽게 작성할 수 있는가? -> writability 다른 프로그래머…