본문 바로가기

전체 글

(60)
[SW Expert Academy] : [컴퓨팅 사고] 논리와 증명/수와 표현 해당 문제를 풀다가 식 세우는것을 어떻게 해야 할지 몰라서 검색을 해보았는데 일부 풀이들에서 아이디어를 얻고 나름 증명?을 해봤습니다. 아직 하드 로직이 익숙하지 않고, 수학에 대한 지식이 얕아 조금 미숙합니다. 혹시 개선 사항이나 추가되어야 할 내용이 있다면 답글 부탁드려요:) Problem 23. NxN 체스판이 있다. 시작 시점에 일부 칸 들이 감염되어 있다. 매초마다 감염이 증가할 수 있다. 규칙은 다음과 같다. 어떤 감염되지 않은 칸은 상하나 좌우로 인접한 네개의 칸들 중 2개 이상이 감염된 상태일 떄 감염된다. 이 규칙에 따라 모든 칸들을 감염시키기 위해서는 초기에 n개 이상의 칸들이 감염되어 있어야 함을 증명하라. 저는 이 문제를 수학적 귀납법을 통해 증명했습니다. (m.blog.naver...
#07-1. 추상 클래스와 인터페이스 2021-05-08 07-1 추상 클래스와 인터페이스 추상 클래스(Abstract Class)는 선언 등의 대략적인 설계 명세와 공통의 기능을 구현한 클래스입니다. '추상(abstract)'이라는 말은 '구체적이지 않은 것'을 나타냅니다. 추상 클래스를 상속하는 하위 클래스에서 추상 클래스의 내용을 더 구체화해야 합니다. 인터페이스(interface)도 대략적인 설계 명세를 가지고 몇 가지 기본적인 부분은 구현할 수 있지만 하위에서 더 자세히 구현해야 하는 점은 추상 클래스와 동일합니다. 하지만 추상클래스와 다르게 인터페이스에서는 프로퍼티에 상태 정보를 저장할 수 없습니다. 단, 다중 상속과 같이 여러 개의 인터페이스를 하나의 클래스에서 구현하는 것이 가능합니다. package chapter_07 fun main() { }..
#06. 프로퍼티와 초기화 2021-05-02 06.1 프로퍼티의 접근 // 코틀린에서 자바 클래스의 static 메서드에 접근하기 fun main() { println(Customer.LEVEL) Customer.login() } /* 결과 : BASIC Login... // 자바의 Customer 클래스 public class Customer { public static final String LEVEL = "BASIC"; // static 필드 public static void login() { // static 메서드 System.out.println("Login..."); } } 코틀린에서는 변수 선언 부분과 기본적인 접근 메서드를 모두 가지고 있기 떄문에 프로퍼티라는 새로운 이름으로 부릅니다. Person 클래스에 변수에 해당하는 priv..
#05-2. super와 this의 참조, 정보 은닉 캡슐화, 클래스와 클래스의 관계 2021-04-27 super와 this의 참조 상위 클래스는 super 키워드로, 현재 클래스는 this 키워드로 참조가 가능합니다. super this super.프로퍼티 이름 // 상위 클래스의 프로퍼티 참조 super.메서드 이름() // 상위 클래스의 메서드 참조 super() // 상위 클래스의 생성자 참조 this.프로퍼티 이름 // 현재 클래스의 프로퍼티 참조 this.메서드 이름() // 현재 클래스의 메서드 참조 this() // 현재 클래스의 생성자 참조 fun main() { // this로 현재 객체 참조 val sean = Developer("Sean") } /* 결과 : [Person] firstName: Sean, 10 [Developer] firstNam: Sean, 10 [Developer]..
#05-1. 클래스와 객체, 생성자, 상속과 다형성 2021-04-25 05-1 클래스와 객체의 정의 객체지향 프로그래밍과 용어 객체 지향 프로그래밍(OOP : Object Oriented Programming)은 프로그램의 구조를 객체 간 상호작용으로서 표현하는 프로그래밍 방식입니다. 객체 지향 프로그래밍 특징 - 추상화(Abstraction): 특정 클래스를 만들 때 기본 형식을 규정하는 방법 - 인스턴스(Instance): 클래스로부터 생성한 객체 - 상속(Inheritance): 부모 클래스의 내용을 자식 클래스가 그대로 물려받음 - 다형성(Polymorphism): 하나의 이름으로 다양한 처리를 제공 - 캡슐화(Encapsulation): 내용을 숨기고 필요한 부분만 사용 - 메시지 전송(Message Sending): 객체 간에 주고받는 메시지 - 연관(Assoc..
#04. 함수와 함수형 프로그래밍 2021-04-25 if문과 조건문 블록의 표현식이 길어질 때 람다식처럼 블록의 마지막 표현식이 변수에 반환되어 할당됩니다. fun main() { val a = 12 val b = 7 // 블록과 함께 사용 val max = if (a > b) { println("a 선택") a // 마지막 식인 a가 반환되어 max에 할당 } else { println("b 선택") b // 마지막 식인 b가 반환되어 max에 할당 } println(max) } /* 결과 : a 선택 12 */ else if문 fun main() { print("Enter the Score: ") val score = readLine()!!.toDouble() // Input Console var grade: Char = 'F' if (score >=..
#03-2. 함수와 함수형 프로그래밍 2021-04-20 03-4 고차 함수와 람다식의 사례 동기화를 위한 코드 먼저 동기화란 변경이 일어나면 안되는 특정 코드를 보호하기 위한 잠금 기법, 동기화로 보호되는 코드는 임계 영역(Critical Section)이라고 부릅니다. 이 코드에서는 Lock을 활용해 임계 영역을 보호하고 있습니다. 보통 프로그래밍에서는 특정 공유 자원에 접근한다고 했을 때 공유 자원이 여러 요소에 접근해서 망가지는 것을 막기 위해 임계 영역의 코드를 잠가 두었다가 사용한 후 풀어 줘야 합니다. // JAVA - Lock, ReentrantLock fun lockCode() { Lock lock = new ReentrantLock() lock.lock(); // 잠금 try { // 보호할 임계 영역의 코드 // 수행할 작업 } finall..
#01.1 전화번호부 만들기(RecyclerView로 개선) 2021-03-25 [실행 화면] [build.gradle(:app)] implementation "androidx.recyclerview:recyclerview:1.1.0" [activity_main.xml] [activity_detail_phone_book.xml] [numberlist_view.xml] [MainAcitivity.kt] package com.hellow.phonebook import android.app.Activity import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.LayoutInflater import android.view.Vi..