본문 바로가기

2학년 2학기213

1.4 Map simplification(3) - NAND, NOR Sum of products를 NAND만 있는 논리회로로 변경하기  NAND(Not AND)(XY)' = X' + Y'즉, 이 말의 의미는 X와 Y의 AND의 ' 도 NAND, X'와 Y'의 OR도 NAND라는 의미이다.따라서 위 오른쪽 사진은 모두 NAND로 이루어진 회로이다.  Products of sum 를 NOR만 있는 논리회로로 변경하기 NOR(Not OR)(X + Y)' = X'Y'즉, 이 말의 의미는 X와 Y의 OR의 ' 도 NOR, X'와 Y'의 AND도 NOR라는 의미이다.따라서 위 오른쪽 사진은 모두 NOR로 이루어진 회로이다. 문제에서 NAND게이트로 만들어라-> SOP를 구하고 SOP를 기반으로 NAND게이트를 만들어라 문제에서 NOR게이트로 만들어라-> POS를 구하고 POS를 기.. 2024. 9. 21.
1.4 Map simplification(2) - 카르노 맵 카르노 맵 사용법 최소항이 1인 곳에 1을 넣어주고 나머지는 0을 넣어준다.셀을 묶는다.셀은 2, 4, 8 단위로 묶을 수 있다.묶을 때 셀의 개수는 최대한 많이, 묶음은 최소한 적게 만들어주어야한다.묶음끼리 OR연산을 해준다.  문제 예시   빨간 부분A: A에만 있고, A'에는 없다. 따라서 AB: B에도 있고 B'에도 모두 걸쳐져있다. 이렇게 되면 B에 해당하는 것이 아무것도 없다.C: C'에만 있고, C에는 없다. 따라서 C'결론: AC'노란 부분A: A에도 있고 A'에도 모두 걸쳐져있다. 이렇게 되면 A에 해당하는 것이 아무것도 없다.B: B에만 있고, B'에는 없다. 따라서 BC: C에만 있고, C'에는 없다. 따라서 C결론: BC 따라서 해당 부분을 모두 OR 연산처리 하면 BC + AC' .. 2024. 9. 21.
1.4 Map simplification(1) - minterm Minterm(최소항): 모든 항이 들어가는 조합(AND) SOP(Some of Products): OR로 연결된 AND [예시]F = Y' + XY + X'Y'Z' POS(Product of Sums): AND로 연결된 OR [예시]F = Y'(X + Y)(X' + Y' + Z') Sum of minterms: OR로 연결된 mintermF(x, y, z) = y’ + xy + x’yz’                 = y’(x + x’) + xy(z + z’) + x’yz’                 = xy’ + x’y’ + xyz + xyz’ + x’yz’                 = xy’(z + z’) + x’y’(z + z’) + xyz + xyz’ + x’yz’             .. 2024. 9. 21.
1-3. Boolean algebra Boolean function: Boolean algebra에서 사용하는 수학 수식 Truth table(진리표): 논리 회로나 논리 연산에서 모든 가능한 입력 조합에 대한 출력 결과를 보여주는 표 Logic circuit: Boolean function 또는 True table(진리표)를 바탕으로 여러 논리 게이트를 통해서 만들 수 있다.   [Boolean algebra의 기본 성질]  Law of Addition과 Law of Multiplication은 서로 dual 관계이다.dual관계란 OR연산이 AND연산이 되고, AND연산이 OR연산이 되는 것, 0이 1이 되고, 1이 0이 되는 관계를 의한다.  [Distributive Law]x + yz = (x + y)(x + z)에 대해서 살펴보자x.. 2024. 9. 21.
1-2. Logic gates [XOR]  [XNOR] 2024. 9. 21.
Kotlin_Basic03 - when(2) when을 사용할 때 우리는 꼭 필수적으로 사용한 코드가 있다. 바로 else이다.하지만 변수의 범위를 명확하게 만들면 else는 필요없다. (물론 사용해도 됨) 그 예시로는 enum과 sealed classe가 있다.enum과 sealed class를 각각 사용한 예시1. enum class 사용 예시enum class는 상수들을 정의할 때 사용되며, 상태나 값을 구분할 때 매우 유용하다.enum class Direction { NORTH, SOUTH, EAST, WEST}fun describeDirection(direction: Direction): String { return when (direction) { Direction.NORTH -> "You are heading N.. 2024. 9. 20.
Kotlin_Basic03 - when(1) 코틀린에서 when 문법은 조건에 따라 여러 분기처리를 할 수 있는 강력한 제어 구조이다.when은 switch 문과 비슷하지만 더 유연하고 강력하게 사용할 수 있다. 주로 값을 매칭하거나 조건을 검사할 때 사용된다.기본 형태val value = 2val result = when (value) { 1 -> "One" 2 -> "Two" 3 -> "Three" else -> "Unknown"}print(result) // Twovalue가 1일 경우 "One", 2일 경우 "Two", 3일 경우 "Three"를 반환하고, 그 외의 값은 "Unknown"을 반환한다.else는 기본적인 값을 처리할 때 사용되며, 반드시 포함해야 한다(모든 경우의 수를 처리하지 않을 경우). 여러 조건 처.. 2024. 9. 20.
Kotlin_Basic03 - null 처리 우리는 변수에 값이 null일수도 있고 아닐 수도 있는 경우를 위해서 nullable 타입을 사용해왔다. 다만 이 타입을 사용한 변수를 사용할 때는 늘 이 변수가 null 값을 가질 수 있다는 생각에 안전조치를 해야했다. val str1: Any = "hello"val str2: Any = nullfun checkTypecast(s: Any?): Sting? { val newStr = s as? String ?: return null if(newStr.isNotEmpty()){ return newStr.lowercase() } return ""} 이렇게 위와 같이 as 연산자를 이용하든, 변수를 사용하든 ?를 붙여줘야 했다. 하지만 이런 수고를 덜어줄 수 있는 방법이 있다. .. 2024. 9. 20.
Kotlin_Basic03 - if 식 if문은 흔히 많이 들어본 분기문이다.  그러면 if 식은 뭘까? if식은 if문과 마찬가지로 조건에 따라 블록 내부의 코드가 실행되는 것은 같다. 다만, 코드 블록 값이 어떤 변수에 저장된다는 점이 다르다 val a = 9val b = 8val max = if(a >= b) a else b 이런 식으로 진행하면 a가 b보다 크거나 같을 경우 a가 max에 입력되고 아니면 b가 입력된다. 위 처럼 간단하면 블록 없이 해도 괜찮지만, 복잡하다면 블록을 만들어서 진행하면된다.val a = 9val b = 8val max = if(a >= b) { a } else { b}  하지만 여기서 주의할 점은 블록 내부 마지막 코드가 변수에 저장되기 때문에 마지막 코드는 꼭 저장할 변수 또는 수를 작성해야한.. 2024. 9. 20.
Kotlin_Basic03 - 연산자 오버로딩 연산자 오버로딩을 사용하는 이유: 기본적으로 코틀린은 기본 타입(int, float, double, ...)에 대해서만 연산자가 적용되어 있기 때문에 커스텀 타입에 연산자를 사용하기 위해서 사용한다.: 🚨 유의할 점은 operator 키워드는 꼭 붙여줘야한다. 🚨 예시1 - times(곱셈)커스텀 타입 생성하기class Point(val x: Int, val y: Int) {}  커스텀 타입에서 곱셈 오버로딩하기//[방법 1 - 클래스 내부]class Point(val x: Int, val y: Int) { operator fun times(p: Point): Point { return Point(this.x * p.x, this.y * p.y) // [설명] .. 2024. 9. 20.
유용한 파이썬 함수들 - len(), map(), filter(), zip(), reduce(), enumerate() len(): 리스트, 문자열 등 자료의 길이 반환 map(): 리스트 내 각 요소들에게 동일하게 간단한 연산을 적용할 때 사용: 주로 이름 없는 람다 함수로 연산을 정의하고, 이를 각 요소에 적용하도록 하는 형태가 많이 사용됨# 기본 형태list(map(변경할 타입, 리스트 명))list(map(lambda 변경할 형태(람다함수), 리스트명))# 활용a = [1, 2, 3, 4, 5]list(map(str, a)) # ['1', '2', '3', '4', '5']b = [1, 2, 3, 4, 5]list(map(lambda x:x+1, b)) # [2, 3, 4, 5, 6] filter(): 리스트 내 요소 들을 특정 기준으로 필터링(즉, 특정 기준을 만족하는 요소만 추출하도록)할 때 사용 # 활용a =.. 2024. 9. 19.
컬렉션 - Dict, Set Dictionary: key, value를 쌍으로 이루는 데이터 콜렉션 타입 # 기본 형태person = dic()person['kim'] = 1person['park'] = 2# 또는person = {'kim': 1, 'park': 2} [딕셔너리 내 원소 접근] person = {'kim': 1, 'park': 2}print(person['kim']) # 1  [딕셔너리의 자료 존재 여부 검사]person = {'kim': 1, 'park': 2}print('kim' in person) #Trueprint('choi' in person) #False  [딕셔너리 내장 메소드]다음은 파이썬 딕셔너리 내장 메소드의 정리이다.1. `keys()`     딕셔너리의 모든 키를 반환한다.2. `values().. 2024. 9. 19.
순서열 -List, tuple 순서열: 여러 개의 데이터를 순차적으로 나열해놓은 자료구조 List: 순차적 데이터의 저장을 위해 사용되는 자료구조 / 순서 O, 수정 O a = [1, 2, 3, 4, 5]# 또는a = list((1, 2, 3, 4, 5))  [리스트 내 원소 접근]: 데이터의 위치 번호를 사용하여 리스트 내 원소 데이터로 접근하는 방법a = [1, 2, 3, 4]a[0] # 1  🚨 음수 인덱스?: 음수 인덱스는 List의 길이에서 뺀 값으로 접근한다.a = [1, 2, 3, 4]a[-1] # 4# a[-1] == a[len(a)-1] == a[4-1] = a[3]  ❓슬라이싱: List의 범위 내 모든 데이터를 접근# 기본 형태list[start:end:inteval] # -> (start   # 사용 방법a =.. 2024. 9. 19.