본문 바로가기

분류 전체보기

(336)
객체지향 프로그래밍 - 상속 (java) 상속받은 자식 : 부모의 메소드 + 변수 상속의 장점 : 코드의 재사용, 유지성 향상 부모가 수정되면 자식도 수정된 방식을 따를 수 있음 자바는 다중 상속을 지원하지 않는다. 부모는 1개 . 자식을 생성할 경우 부모의 생성자는 자동으로 실행된다. 우리는 부모의 생성 파라미터가 있다면 그것도 충족해줘야한다. 메소드 오버라이딩 : 부모의 메소드를 자식에서 새로 정의 메소드 오버로딩 : 같은 클래스에서 같은 이름이지만 다른 파라미터를 받을 수 있음 오버라이딩시 선언이 자식 클래스이면 자식의 메소드를 따름. final 클래스는 자식을 가질 수 없음 protected : 자식 클래스에서만 접근할 수 있는 변수 같은 패키지에서는 접근이 가능
객체지향 프로그래밍 - Object, Class classname name = new classname() -> new 연산자는 클래스의 생성자를 call, name은 포인터로 classname으로 만들어진 객체를 가리킨다. 새로운 object가 생성된다. 각 자바 클래스당 메인은 한개 Main는 실행 클래스 아닌 다른 클래스는 모두 라이브러리 클래스로 불린다. Member in Class - 변수 - 메소드(function) - 생성자(Constructor) Local variable , public variable - 지역변수 : 오브젝트 종속 변수 - 필드 : 오브젝트(클래스)에 선언되어있는 변수 Overloading - 오버로딩은 같은 이름의 메소드인데 다른 파라미터를 받을 수 있는 방법이다. 이는 생성자, 메소드 모두 가능하다. 이는 다형성이..
머신러닝 - 최대우도법, 최대사후확률 데이터로부터 확률을 추정하는 것은 머신러닝의 기본이다. 여기에는 최대 우도 추정 MLE, 베이지안 추론 및 빈도 기반 방법을 포함하여 데이터에서 확률을 추정하는 방법 등이 있다. Ex) 동전을 던졌을 때 앞면 뒷면이 나올 확률 1. 편향성(bias) 당연히 상식적으로 생각하면 50퍼센트이지만 자연은 그렇지 않다. 10번을 던졌다면 앞 7번 뒤 3번 나올 가능성도 충분히 있다. 여기서 앞면이 나올 확률을 a 라하면 뒷면이 나올 확률은 1 - a 이다. 편향성을 추정하는 방법으로 베이즈 추정 방법이 있다. 베이즈 추정 방법은 사전 정보와 실제 결과를 결합하여 편향성을 추정하는 것이다. * 최대우도법(MLE) - 확률 분포 모델의 모수를 추정하는 방법 중 하나이다. MLE는 데이터의 Likelihood를 최대..
객체지향 프로그래밍 - 집합관계 : 완성품과 부품의 관계 ex) 자동차 , 엔진, 타이어 - 사용관계(의존성) : Object를 사용하는 주체 - 상속 : 부모와 자식, 자식은 부모의 속성을 갖는다. 상속은 코드의 재사용을 가능하게 한다. 코드의 유지보수 시간을 줄일 수있다. - 캡슐화 : 메소드와 변수를 바인딩. 사용자는 어떻게 작동하는지 알 필요가 없다. - 다형성 : 오버로딩, 오버라이딩을 이야기함. 오버로딩은 같은 이름의 받는 파라미터가 다름, 오버라이딩은 "부모"의 메소드를 변형하여 사용하는 것이다. 파라미터 타입과 함수 타입도 동일해야한다. - 클래스와 오브젝트 : 클래스는 설계도 오브젝트는 그 설계도로 만든 실제 구현물을 이야기한다. 오브젝트는 실제로 구현할 수 있는 모델을 뜻한다. ex) 자동차 그리고 인스턴..
멀티코어 컴퓨팅 - Create a Parallel Program 멀티코어 컴퓨팅의 궁극적 목표는 결국 Better Perfomence 를 내는 것이다. 이름과 마찬가지로 a + b c + e 위 코드를 병렬 컴퓨팅 처리해서 한번에 계산하면 연산 속도는 2배 빠를 것이다. 1. Decomposition 처리할 작업을 분류한다. A라는 거대한 작업이 있다면 이를 a b c d로 분류하는 것이다. 이 때 a b c d중 어떤 작업을 병렬처리할 수 있는지도 분류하는데 이때 병렬처리 가능한 부분이 클 수록 성능개선치가 높아진다. - Amdahl's Law 성능 개선치 예상 공식 이때, 프로세서가 2억개 있어도 순차처리가능 부분은 무조건 25초가 걸린다. 그러나 병렬처리가 가능한 부분은 거의 0초로 줄일 수 있다. Speed Up = old running time / new r..
시퀀스 컨테이너 - list 더블 링크드 리스트가 구현되어있는 라이브러리이다. 그러나 리스트 형태이기 때문에 iterator로 순회해야하고 배열 벡터 처럼 [] 조회는 불가능하다. 삽입 - list.push_back(a) - list.push_front(a) 삭제 - list.remove(a) * 중복된 원소까지 전부 삭제한다. - list.remove(*a) * 여기서 이는 iterater이다. 그 원소만 삭제한다. - pop_front() - pop_back() 탐색 find(list.begin(), list.end(), 원소) 찾으면 그 위치 주소, 아니면 마지막 주소
프로그래머스 - [1차]캐시 LRU가 무엇인지 알아야 풀 수 있는 문제다. 컴퓨터구조, 운영체제, 데이터베이스 등 필수 과목에서 한번씩 나오는 개념인데 가장 사용한 지 오래된 것을 캐시에서 빼내겠다는 뜻이다. 캐시는 매우 유용하지만 너무 커지면 오히려 느려지고 무엇보다 비용이 많이든다. 예를들어, 캐시의 크기가 3이고 캐시에 A B C 순서로 들어왔다고 하자, 그리고 D가 들어왔다. -> 가장 사용한지 오래된(들어온지 오래된) A가 빠지고 B C D 형태가 될 것이다. 그런데 D가 아니라 A가 들어왔다면, 캐시 히트로 캐시에는 변화없다. 그 다음 D가 들어왔다면? -> A는 들어온지 가장 오래되었지만 방금 캐시 히트로 썼기 때문에 사용한지 가장 오래됐고 사용한적 없는 B가 빠진다. 그러므로 A C D 형태가 된다. 이 알고리즘을 작..
C++ 문자열 자르기 split / 문자열 <-> 정수 형 변환 C++로 PS를 하다보면 가장 짜증날 때가 문자열을 다룰때일 것이다. 문자열을 파싱할때, 문자열을 정수형으로 변환하거나 역변환할때 자바 파이썬 사용자들은 편한 방법을 사용할 수 있지만 C++ 유저들은 이것 또한 암기를 하고 있어야한다. 1. #include string stream 의 약자이다. 특이하게 cin >> 으로 입력하는 방식과 다르게 > tmp) { STR.push_back(tmp); } for (auto a : STR) cout tmp) { STR.push_back(tmp); } cout