2024/11 60

프로그래머스 LV.2 다음 큰 숫자

https://school.programmers.co.kr/learn/courses/30/lessons/12911 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   테스트 케이스는 통과하지만 최적화에 실패한 코드#include #include #include using namespace std;long long binary(int n) { stack stk; string b_str = ""; while (n != 0) { if (n % 2 == 1) stk.push(1); else stk.push(0); n /= 2; } while (!(..

연산자 오버로딩과 const

const를 쓰는 이유는?멤버 변수의 값이 바뀌는 것을 방지하기 위해서최대한 많은 곳에 const를 붙일 것지역 변수에 까지도 붙일 것모든 회사가 이 코딩 표준을 따르지는 않는다. Vectro operater + (const Vector& rhs) const; const &를 사용하는 이유는?불필요한 개체의 사본이 생기는 것을 방지하기 위해서이다.멤버 변수가 바뀌는 것 역시 방지하기 위해서이다.어디에 const를 넣고 안넣고는 곰곰히 생각하면어디에 const를 넣어야 할 지 알 수 있다.생각보다 연산자 오버로딩에서 const는 생각보다 잘못쓸 가능성이 있다.왜냐하면 연산자 오버로딩을 짤 일이 별로 없기 때문이다. 잘못 사용하는 코드는 다음 예시와 같다.// 잘못된 코드의 예시std::ostream& op..

힙을 이용한 중앙값 구하기

힙을 이용한 중앙값 구하기중앙값 먼저 해보자 이번 게시글에서는머신 러닝, 데이터 분석 응용 프로그램에서 접할 수 있는 문제를 풀어보고자 한다. 어떤 소스로부터 한 번에 하나의 데이터를 연속적으로 받는다고 가정하자.그리고 매번 데이터를 받을 때마다지금까지 받은 데이터의 중앙값을 계산한다고 가정하겠다. 간단한 방법은 매번 데이터를 받을 때마다 모든 데이터를 정렬하고,그 중에서 가운데 원소를 반환하는 것이다.그러나 이러한 작업은 정렬 연산 때문에 O(N log N)의 시간 복잡도를 가진다.들어오는 데이터양이 늘어날수록 이 방식은 매우 많은 리소스를 사용하게 된다.여기서는 힙을 이용해서 최적화하는 방법을 알아보자! 1. 먼저 필요한 헤더 파일을 포함하고두 개의 힙을 사용해서 데이터를 저장할 것이다.하나는 최대힙..

C++ 함수 오버로딩과 C언어의 _Generic

C++ 함수 오버로딩은 C++만의 것이라고 보긴 어렵다. C에서도 함수 오버로딩과 비슷한 기능이 있다. _Generic 키워드를 사용하여 컴파일 시간에 인수의 형식을 기반으로 식을 선택하는 코드를 작성하면 된다. 인수의 형식을 호출할 함수가 선택되는 C++의 오버로딩과 유사하다. 여기서는 인수의 형식을 기반으로 평가할 식이 선택된다. 예를 들어 _Generic(42, int : "integer", char : "character", default : "unknown");은 42의 형식을 평가하고 목록에서 일치하는 형식 int를 검색한다. 이 형식을 찾아 "integer"를 반환한다. generic-selection: ( , ) _Generic assignment-expressionassoc-list as..

복사 생성자

복사 생성자복사 생성자란 무엇일까?Java에는 없는데 C++에는 있는 기능이다.그럼 C에는 있을까? 없다.OOP의 개념이 있어야 생성자가 있다.생성자라는 개념이 있으려면 OOP가 있어야 한다. 그럼 Java는 OOP인데 왜 복사 생성자가 없냐?클론 함수 ( = clone()) 이런 걸 사용해서 쓴다. 그럼 복사 생성자는 어떻게 만들까? 자신과 같은 클래스에 있는 개체를 매개변수로 받는 코드를 짜면 된다. 즉, 매개변수가 다른 개체 그것도나랑 똑같은 클래스에 속한 개체면 복사 생성자이다. // Vector.hclass Vector{public: Vector(const Vector& other);private: int mX; int mY;};// Vector.cppVector::Vector(const Vec..

구조체와 클래스의 차이

구조체와 클래스의 차이 중 가장 먼저 설명할 수 있는 것은기본 접근 권한이 다르다는 것이다. struct 는 기본적으로 public이고,class 는 기본적으로 private이다. 컴퓨터는 struct와 class을 구분할까?-> 어셈블리단에서는 이 둘의 차이가 있을까? 안난다.C에 있던 기능이 다른 언어에 있다면, 고급 엔지니어가 만든 기능이다. 그럼 컴퓨터는 struct를 알까?모른다. 그룹개념도 없다 따로따로 노는 건데 사실은,메모리 어디에 접근한다 일 뿐이지,클래스와 구조체는 거의 차이없이 돈다. 근데 컴파일러는 구분할까?구분한다.컴파일러 에러가 잡아내기 때문에컴파일러는 private와 pubilc의 차이점을 안다. 구조체에 관한 코딩표준(기본) C++에서는 구조체를 클래스처럼 쓸 수 있다.하지만..

3차원 벡터

3차원 벡터의 길이는 피타로가스의 정리를 두 번 적용해서 구할 수 있다.   벡터를 순전히 방향을 나타내는 용도로만 사용하는 경우벡터의 길이는 그닥 중요하지 않다.각 벡터의 성분을 벡터의 크기로 나누면 벡터가 정규화 된다.  내적접곱(dot product)라고도 부르는 내적(inner product)은 스칼라값을 내는 벡터 곱셈의 일종이다.결과가 스칼라라서 스칼라 곱이라고 부르기도 한다.  다른 말로 하면 내적은 대응되는 성분들의 곱의 합이다.내적의 정의만 봐서는 내적의 기하학적 의미가 분명하지 않는데,코사인 법칙을 적용해 보면 다음과 같은 관계를 찾아낼 수 있다.  여기서 θ는 0 따라서 두 벡터의 내적이 두 벡터 사이의 각도의 코사인을벡터 크기로 비례한 것임을 뜻한다. u와 v 둘 다 단위벡터일 때 ..

new와 malloc의 차이

C++ new 및 delete는 연산자이다.C스타일 malloc은 라이브러리에 내장된 함수이다. 할당 연산자인 new의 기본 형식은 다음과 같다.포인터 = new 타입 [(초기값)]; 즉, 차이점은 다음과 같다. 1. malloc/free는 라이브러리가 제공하는 함수인데 비해new/delete는 언어가 제공하는 연산자이다.그래서 별도의 헤더 파일을 포함할 필요없이 언제든지 사용할 수 있다.이 연산자를 쓴다고 해서 프로그램이 커지는 것도 아니다.연산자이기 때문에 사용자 정의 타입에 대해 오버로딩 할 수도 있다. 사용자 정의 타입 오버로당 예시// microsoft 출저class MyClass{public: void * operator new[] (size_t) { return 0; } ..

이산 수학 - 논리와 명제

추론(argument) 란, 주어진 명제가 참인 것을 바탕으로 새로운 명제가 참이 되는 것을 유도해내는 과정이다. 전제(premise)란, 추론 과정에서 주어진 명제들이다. ex) p₁,p₂,p₃ .... pn 명제에는 순서가 그렇게 중요하지 않다. pn-3 ... pn = q 결과 유도도 동일하다. 결론(conclusion)이란, 추론 과정에서 새롭게 유도된 명제이다. 추론은 유효 추론, 허위 추론 두 가지로 나눌 수 있다. 유효 추론 (valid argument) : 전제가 참(T)이고 결론도 참(T)인 추론 허위 추론 (fallacious argument) : 결론이 거짓(F)인 추론 유효 추론 / 허위 추론의 여부는 진리표를 이용하거나 여러 추론 법칙을 이용하여 증명할 수 있다. 이 외에도 추론 ..