목차 상속 상속은 어떤 한 클래스의 속성과 메서드를 다른 클래스에서도 쓸 수 있게 하는 것이다. 예를 들어, 어떤 게임의 몬스터를 전부 만들게 되었다고 해보자. 모든 몬스터 전부 public class slime{ private int hp; private int ATK; private int DEF; public void tackle() /* 등등 */ } public class wolf{ private int hp; private int ATK; private int DEF; public void bite() /* 등등 */ } 만들고 보니 hp, ATK, DEF 등 슬라임과 늑대는 서로 공통적으로 가지는 속성들이 많다. 다른 몬스터들을 생각해봐도, 이 속성들은 가지고 있어야 몬스터라 부를 수 있다...
목차 캡슐화 / Encapsulation 캡슐화는 데이터와 행위를 묶어 객체라는 형태로 만드는 것을 말한다. 앞서 말했던, 객체의 정의와 같다고 생각할 수 있다. 하지만, 캡슐화는 묶는 과정에서 속성(attribute), 메서드(method)를 외부로부터 감출 것인지, 공개할 것인지 설정할 수 있다는 것이 핵심이다. 바로 '데이터 은닉'기법이다. 데이터 은닉을 통해 감춰진 속성, 메서드는 외부에서는 접근할 수 없으며, 객체내부에서만 수정, 사용할 수 있다. 곡개하는 속성, 메서드는 'public' 접두어를, 비공개하는 속성 메서드는 'private' 접두어를 붙인다. 객체는 책임으로 이루어져있다. 우리는 어떤 객체에게 특정 행동을 기대하고, 객체를 만든다. 이때, 이 객체를 '1번객체'라고 하고, '2번..
목차 객체지향의 개념 객체지향 프로그래밍은 객체가 상호작용하는 방식으로 프로그램을 만드는 방법이다. 이런 객체지향 프로그래밍은 캡슐화, 다형성, 상속이라는 특성이 있다. 이 특성들을 가지고 있지 않으면 객체지향 언어라고 불릴 수 없을 만큼 중요한 특성이다. 내가 공부해온 책에서는, 또 하나의 특성, '합성'을 더해 객체지향을 말한다. 그런 객체지향의 특성을 나열해보자면 캡슐화 다형성 상속 합성 이 되겠다. 객체지향 프로그래밍을 하기 전에, 일단 객체가 무엇인지 알아야 객체지향적이 무엇인지 알고 프로그래밍을 할 수 있지 않겠는가? 먼저 객체가 무엇인지 알아보도록 하자 객체란? 일단 책에서 말하는 객체의 정의를 보고 알아가자. '객체는 우리가 인식하는 모든 대상, 물체 등 객관적으로 인식할 수 있는 대상이다..
목차 세그먼트 트리 어떤 수들의 집합이 있다. 그 집합은 원소가 마구마구 변할 수 있다고 한다. 이 때, 그 집합의 부분합을 아주 빠르게 구하기 위해서 만들어진 구조이다. 예를 들어서.. 1, 5, 6, 7, 4, 8, 2, 3 이렇게 수가 있다고 하자. 우리가 이 수들에서 특정 범위의 합을 구하려면 어떻게 해야할까? 역시 제일 간단한 방법은 다 더하는 것이다. 3~6번째 원소를 더하면. 6+7+4+8 = 25 이렇게 다 더하는 경우 시간복잡도는 O(N)으로 작은 범위 내에서 보면 나쁠 수 있다. 하지만, 이 합을 원하는 곳이 많아서 수천, 수만명이 요구를 한다면?? 또, 이 데이터에 접근 가능한 사람이 많아서 계속해서 값이 바뀐다면?? 참으로 난감할 것이다. 데이터는 바꿔줄 수 있지만. 합을 계속 해서..
목차 백준 7662번 이중 우선순위 큐. 우선순위는 큐에 들어가는 정수값 자체를 우선순위로 하는 이중 우선순위 큐이다. 최대힙과, 최소힙을 이용해서 구현을 해 보았다. 최대값을 제거할때는 최대힙에서 삭제연산을 하고, 삭제한 요소를 저장해둔다. 그리고 최소값을 제거할때 만약 제거하는 요소가 저장해둔 배열에 있다면, 한번더 삭제한다. void pop(heap *h, heap *h2, int num){ int temp; //최대값 삭제 if(num == 1){ temp = popM(h); for(int i = h->numsize-1; i > -1 ; i--){ if(temp == h->nums[i]){ temp = popM(h); h->nums[i] = h->nums[h->numsize--]; } } } //..
목차 Neural Network Basics Binary Classification -> 이진 분류 뭐가 맞다 아니다 => 1, 0으로 나타낼 수 있는것을 구별하는것 이런 이진분류를 한번 해보도록 하자. 일단 첫번째로 입력과 출력이 필요하다. 이런 하나의 입력과 출력을 training set이라 하고 $$ (x, y) \to x \in \mathbb{R}^{nx}, y \in {1, 0}$$ 라고 말할 수 있다. 이진분류를 이미지로 나타내면 training set은 어떻게 구성될까? 먼저 이미지가 어떻게 표현되는지 알아야 한다. 이미지는 $$ n \times m$$행렬로 이루어져 있고 빨강, 초록, 파란색의 3원색이 각각 어떤 값을 갖고 있는지를 저장한다. 이를 훈련예제로 옮기면 각각의 행렬을 하나의 열..
목차 Introduction Linear Regression 선형 회귀(linear Regression)는 다수의 데이터를 대표할 수 있는 직선을 만드는 것을 말한다. 예를 들어 집의 가격과 크기를 생각해보자. 아래의 그래프와 같이 보통 집의 크기가 크면, 집의 가격이 높아지는 경향이 있다 이 모두를 적당히 대표할 수 있는 직선을 하나 그을 수 있는데, 이것을 선형회귀라고 한다. 이런 직선을 그리는 함수를 집의 크기를 입력으로 받고 집의 가격을 출력으로 하는 Single Neuron이라고 한다. Supervised Learning 인공지능을 학습 시킬 때, 결과를 알려주고 학습을 시키는 지도학습이라는 기법이다. 지도학습은 Structed Data, Unstructed Data를 통해서 학습을 시키는데, ..
목차 인공지능 공부의 시작 어제 다시 학교에 왔다. 부모님의 차를 타고, 고속도로를 타서, 먼길을 달려왔다. 낮이라서, 코로나 때문에 사람들이 많이 안다닌다고 생각하지만, 오는길에 차가 막혔던 적이 한번도 없었다. 곰곰히 생각해보니 참 신기한거다. 어떻게 이많은 도로들을 연결하고, 건설했을까 어떤 기준으로? 언제 분기하는지 이런것들 말이다. 새로운 도로를 건설하는건 엄청난 비용과 시간이 들어가는 일인데, 하나하나를 신중하게 결정해야하는데, 판단 기준이 뭘까.. 라고 그래서 난 내 나름대로 Ai를 사용하면 그 판단을 내릴 수 있지 않을까 생각했다. 내가 아는 Ai는 인간이 풀기 힘들만한 여러가지 데이터들을 모아서 최상의 결과를 내어주는 그런 기술로 알고있다. 그렇다면, 지금 존재하는 모든 교통정보들을 모아..
목차 에라토스테네스의 체 소수판정의 가장 기본이 되는 에라토스테네스의 체이다. 소수는 약수가 1과 자기자신만을 가지는 수이다. 소수를 구하는 알고리즘을 찾아보자. 알기 쉽게 예를 들어보겠다. 1~50까지의 소수 1부터 50까지의 수 중 소수를 찾는 방법을 보자 먼저 숫자를 다 적어본다. 그리고, 제일 첫번째 소수인 2의 배수를 다 지워준다. 지워주는 이유를 생각을 해보면, 소수는 1과 자기자신만을 약수로 가지는 수 이다. 어떤 수의 배수는 소수가 될 수 없다. 그러므로 범위내의 소수의 배수를 다 지워주면, 소수만 남게된다. 그렇게 2의 배수를 지우고, 3의 배수 5의 배수 7의 배수 이렇게 까지만 지워주면 나머지 수 들은 전부 소수가 된다. 왜 7까지만 지워줄까? 근데 앞에서 그러므로 범위내의 소수의 배..