전체 글
저작권을 표기하지 않아도 되는 아이콘 사이트 (ICONFINDER)
https://murx2.tistory.com/7 아이콘 무료 공유 사이트 (상업가능) 아이콘 사이트 기준은 상업사용시에도 무료일 것. 그뿐추가적으로 감사하다는 말을 하고 싶네요.도네는 돈 많이 벌면 꼭할께요. 메트라이즈아이콘http://www.alessioatzeni.com/metrize-icons/ 아이콘몬스 murx2.tistory.com ICONFINDER에서 좌측 검색 옵션에 Free, No link back 을 설정해서 검색한다.
그리디 알고리즘 문제 및 풀이 (Python)
코테 준비를 위한 알고리즘 공부 순서 위 링크에서 첫번째 순서인 그리디 알고리즘 문제를 풀고 풀이를 기록하는 게시글입니다. 1. 그리디 알고리즘 그리디(Greedy) : 욕심많은,탐욕스러운 미래를 생각하지 않고 각 단계에서 가장 최선의 선택을 하는 기법. 각 단계에서 최선의 선택을 한 것이 전체적으로도 최선이길 바라는 알고리즘 현재 상황에서 '지금 당장 좋은 것!'만 고르는 것. 문제를 풀기위한 최소한의 아이디어를 적절히 떠올려야 풀 수 있다. 동적 프로그래밍 사용 시 지나치게 많은 일을 한다는 것에서 착안하여 고안된 알고리즘입니다. 동적 프로그래밍을 대체하는 것은 아니고 같이 쓰이며 서로 보완하는 개념. 문제를 읽고 문제가 해결될 수 있는 경우의 수를 모두 생각해볼 것. 문제 (❌ 표시는 혼자 못푼 문..
티스토리 인기 테마 hello 붙여넣기 했을 때 다크모드에서 색상다른 문제 html 수정하기
사이트에서 글을 복사해서 붙여넣기하면 배경색이 입혀져서 다크모드를 하면 배경에 흰색이 그대로 남아져있더라구요. 화면 우측 아래 달모양을 표시하면 다크모드 on/off하실 수 있어요. (pc모드에서만 지원) 다음 글의 차이가 보이시나요? 첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다. (흰배경) 첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다. (투명배경) 흰배경은 붙여넣기를 한 것이고, 투명배경은 붙여넣기 한 것에서 html모드에서 을 제거한 것입니다. html코드는 아래처럼 되어있어요. 그래서 붙여넣기시 배경에 색상이 남을 경우 티스토리 에디터의 기본모드를 html모드로 바꿔서 코드에서 속성을 제거해줘야해요. 간혹가다가 div의 style 속성도 지워줘야 할..
코테 준비를 위한 알고리즘 공부 순서
코테준비과정에서 하루하루 푸는 문제를 업데이트하는 게시글입니다. 2023.9.25 코테 준비 시작!! 문제 조사 1. Jeong Jangoh 님이 만드신 자주 출제되는 유형과 풀어보면 도움이 많이 되는 문제 https://buly.kr/2qUsSAZ [Algorithm] 백준 문제 추천 devjeong.com 2. SW마에스트로 12기 지원대비 문제 풀이 https://www.acmicpc.net/workbook/view/10475 문제집: SW마에스트로 12기 지원대비 문제풀이 (1,2차) (bc1916) www.acmicpc.net 3. covenant 님이 만드신 코테 고득점 kit https://covenant.tistory.com/145 💊 코딩테스트 고득점 kit 20.04.04 20.04.2..
티스토리 접은글 폈을 때의 배경색 바꾸기
https://pogn.tistory.com/170 간단한 북클럽 스킨 접은글 배경색 변경법 최근 블로그 글을 작성하면서 접은글 기능을 자주 활용하게 된다. 글의 가독성을 떨어트리고 전체적인 흐름에 방해가 되지만 적어두고 싶은 상세한 내용, 긴 Code 등을 적어두는데 아주 유용하다 pogn.tistory.com
[C++] 클래스의 정적멤버 (static)
정적멤버 (static) - 인스턴스를 선언하지 않고 직접 호출할 수 있다. - 변수든 함수든 정적 멤버는 사실상 전역 변수나 함수와 같다. 다른점은 클래스의 멤버라는 점이다. - static 예약어를 작성해 사용한다. - this 포인터를 사용할 수 없다. - 정적 변수는 반드시 선언과 정의를 분리해야한다. 정적 멤버에 접근하는 2가지 방법 1) 인스턴스 및 멤버 접근 연산자 : a.GetCount() 2) 클래스이름 및 범위 지정 연산자 : CTest::GetCount() 정적멤버 사용예 class CTest { public: static int GetCount() { return m_nCount; } private: int m_nDta; //정적 멤버 변수 선언(정의는 아니다!!) static in..
[C++] delete 예약어를 이용한 명시적 메서드 삭제
delete 예약어를 이용한 명시적 메서드 삭제 해당 메서드를 호출하는 경우를 차단한다. class CMyData { public: void SetData(int nParam) {m_nData = nParam;} void SetData(double dParm) = delete; //명시적 메서드 삭제 private: int m_nData; } int main() { CMyData a; a.SetData(10); a.SetData(5.5); //삭제된 함수를 참조하려고 합니다. 라는 오류를 띄운다. (컴파일 오류발생) } 개발자 주의사항 프로그래밍 경험이 조금이라도 쌓인다면 어설프게 살아서 작동하는 코드가 더 심각한 문제를 만든다는 사실을 알게 될 겁니다. 그런 의미에서 delete와 같이 오류 발생 가능..
[C++] 상수형 메서드, mutable, const_cast< >
상수형 메서드 - 멤버변수에 읽기 접근은 가능하지만 쓰기는 허용되지 않는 메서드. - 원형 뒤에 const예약어만 붙이면된다. - 값을 변경하지 않는다는 안정성을 준다. - 할 수만 있다면 '최선을 다해' const를 사용하기 바란다. int GetData() const { return m_nData; } 상수형 메서드에서 쓰기연산을 실행할 경우 class CTest { public: int GetData() const { SetData(20); // 상수화된 메서드가 아니기 때문에 호출할 수 없다. 오류 발생. m_nData = 20; //대입연산자 사용 불가능. return m_nData; } int SetData(int nParam) {m_nData = nParam;} 개발자 마인드 정말 실력있는 ..
[C++] 클래스 요구사항에 맞게 코드 구현하기
요구사항에 맞게 코드 구현하기 더보기 SetString() 메서드 정의할 때주의사항 - 매개변수로 전달된 문자열의 길이를 측정하고 m_nLength에 저장합니다. - 매개변수로 전달된 문자열이 저장될 수 있는 메모리를 동적 할당합니다. (new 연산자를 이용할 것) - 동적 할당한 메모리에 문자열을 저장(m_pszData)합니다. - 매개변수가 NULL이거나 문자열의 길이가 0인 경우를 고려해야합니다. - 여기서 동적할 당한 메모리는 언제 어디서 해제하는지 생각하고 대응합니다. - 사용자가 다음예와 같이 이 함수를 2회 호출하는 경우를 생각하고 대응합니다. (a.SetString("Hello"); a.SetString("World");) Release() 메서드 정의할 때 주의사항 - m_pszData라..
[C++] 메서드, this 포인터
메서드 메서드(=멤버함수)의 원형 - static 예약어: 정적 메서드 , 쓰기 불가능 - const 예약어: 상수형, 상수화된 메서드 , this 포인터 접근 불가능 - 메서드 = 인터페이스함수라고 해도됨 static 반환형 클래스이름::함수이름(매개변수) const; 멤버변수에 접근하는 정확한 방법 this->클래스명::멤버변수명 (소속을 정확히 명시할 수 있다.) 멤버변수명만 쓰더라도 내부적으로 this가 붙어서 컴파일된다. class CMyData{ public: void PrintData(){ cout CMyData::m_nData
[C++] 명시적 디폴트 생성자
명시적 디폴트 생성자 (default 예약어) 별도로 정의하지 않아도 선언과 정의를 한 번에 끝낼 수 있다. class CTest{ public: //디폴트 생성자 선언 CTest(void); //사실상 CTest(void){};와 같은 코드. 클래스 선언내부에 생성자 정의까지 포함된것. //완전 분리라고 볼 수 없음 } //클래스 외부에서 디폴트 생성자 정의 CTest::CTest(void){} class CTest{ public: //디폴트 생성자 선언 및 정의 (별도로 정의를 기술하지 않을 수 있음) (? 외부에 정의를 안해도되는건가..?) CTest(void) = default; } 더보기 Visual Studio C++ 사전 c++ 공부 내용을 지속해서 추가하는 게시글입니다. 참고 책 Part1..
[C++] 생성자 다중정의
생성자 다중정의 - 생성자도 함수이므로 다중정의가 가능하다. - 제작자는 동일한 멤버를 초기화하는 코드를 여러번 기술해야하는 번거로움이 있다. 이 번거로움을 생성자 위임으로 해결한다. 생성자 위임 - C++11 표준부터 지원된다. - 생성자 초기화 목록에서 다른 생성자를 추가로 부를 수 있다. - 같은 일을 하는 코드가 여러 번 반복해서 나타날 필요가 없어졌다. class CMyPoint { public: CMyPoint(int x) { if(x>100) //x값이 100이 넘는지 검사하고 넘으면 100으로 맞춘다. x = 100; m_x = 100; } CMyPoint(int x, int y) :CMyPoint(x) //x값을 검사하는 코드가 이미 존재하므로 재사용한다. //생성자초기화목록에서 다른 생..
[C++] 참조형식 멤버변수 초기화 (생성자초기화목록 이용)
참조형식 멤버변수 초기화 - 참조 형식으로 선언된 멤버변수는 반드시 선언과 동시에 초기화해야한다. - 그러므로 반드시 생성자 초기화 목록을 이용해 초기화해야한다. class CTest { public: CTest(int &rParam) : m_nData(rParam) {}; int GetData(void) {return m_nData;} private: int &m_nData; }; int main(){ int a = 10; CTest t(a); cout
[C++] 동적 객체의 생성과 소멸
클래스의 인스턴스 생성방법 1) 선언해서 생성 2) new 연산을 통해 동적으로 생성, 동적으로 생성된 객체는 delete연산으로 삭제. 동적 객체의 생성과 소멸 - 동적 객체의 생성 및 소멸 시점은 코드에서 명확히 알 수 있다. - new와 delete연산자는 각각 생성자와 소멸자를 호출하기 때문. - 배열로 생성한 객체들은 반드시 배열로 삭제해야한다. - 배열로 생성한 객체를 배열로 삭제하지 않는다면 첫번째 요소 하나만 소멸하고 나머지는 그대로 메모리에 남는다. CTest * pData = new CTest; delete pData; CTest * pData2 = new CTest[3]; //생성자 함수가 세개 순서대로 호출된다. delete[] pData2; //반드시 배열로 삭제 (소멸자함수가 세..
[C++] 생성자와 소멸자
생성자와 소멸자생성자 Constructor, 소멸자 Destructor - 클래스 객체가 소멸될 떄 자동으로 호출되는 함수 (소멸자) - 함수임에도 불구하고 반환 형식이 없다. - 함수 이름이 클래스 이름과 같다. - 소멸자 이름 앞에는 ~가 붙는다. 생성자와 소멸자의 차이점 - 생성자는 다중 정의할 수 있고 소멸자는 하나만 정의가능하다. 디폴트 생성자 - 매개변수가 하나도 없는 생성자 - 클래스 제작자가 디폴트 생성자와 소멸자를 기술하지 않아도 컴파일러가 알아서 만들어 넣는다. - 아무런 코드도 추가되지 않지만 내부적으로 컴파일러가 만든다 - 생성자와 소멸자가 없는 클래스는 없다고 생각하면 된다. 클래스가 소멸되는 시점 - 선언된 블록 범위가 끝나면 자동 소멸한다.class CTest { public:..
[C++] 클래스 접근 제어 지시자
접근 제어 지시자 제작자와 사용자를 구분하는 매우 중요한 문법이다. 제작자 스스로 자신이 만든 클래스의 특정 요소에 사용자가 접근할 수 없게 하려면 접근 제어 지시자를 활용해야 한다. - 제작자가 얻는 이득: 사용자로 인한 값의 변화를 통제할 수 있다. - public: 멤버에 관한 모든 외부 접근이 허용 - protected: 멤버에 관한 모든 외부 접근이 차단. 단, 상속 관계에 있는 파생 클래스에서의 접근은 허용 - private(default): 외부 접근 뿐만 아니라 파생클래스로부터의 접근까지 모두 차단. 클래스를 선언할 떄 별도로 접근 제어 지시자를 기술하지 않으면 private으로 간주. private 멤버변수를 사용자 코드에서 접근할 수 없다. //제작자 코드 class CTest { in..
[C++] 클래스 기본 문법
클래스 기본 문법 클래스: 함수를 포함 할 수 있는 구조체 클래스 문법 class 클래스이름 { 접근제어지시자: 멤버변수선언; 멤버함수선언및정의; }; 구조체와의 차이점: 접근 제어지시자가 존재, 함수를 멤버로 포함할 수 있음. 멤버 선언 및 정의 - 클래스는 생성자를 이용해 멤버변수를 초기화할 수 있다. - 생성자: 반환자료형이 없다. 호출하는 함수가 아니라 적절한 시기에 내부에서 자동으로 호출되는 함수. 생성자 //제작자 코드 class CTest { public: CTest() //CTest 클래스의 '생성자 함수' 선언 및 정의 { m_nData = 10; //인스턴스가 생성되면 자동으로 초기화 } int m_nData; //멤버 데이터 선언. //(생성자보다 밑에 있어도 클래스 내부에 선언되어있..
[C++] 객체지향 프로그래밍 개요
3.1 객체지향 프로그래밍 개요 절차지향형 프로그래밍(C): 정해진 한 가지 흐름을 내가 모두 알고 있고 직접 코드를 따라갈 수 있다. 객체지향형 프로그래밍(C++): 생성자와 소멸자 함수라는 별도의 흐름이 존재한다. (클래스의 핵심이다.) 1. 클래스 함수를 포함할 수 있는 구조체의 확장이라고 생각. 2. 생성자와 소멸자 클래스를 객체가 생성 및 소멸할 때 '자동으로' 호출되는 함수. 클래스와 객체를 다루는 데 꼭 필요 3. 메서드 함수의 형태로 클래스의 실제 동작과 상태를 책임진다. 객체지향 프로그래밍 방식 - 제작자와 사용자 관점을 분리해서 생각하기 - 클래스를 사용할 다수의 사용자를 배려해서 프로그래밍해야한다. - 사용자의 편의성을 극대화햐야 한다. - 사용자의 실수 가능성을 제작자가 차단해야한다..
[OpenGL] 모델의 특정축을 고정하여 회전
회전 방식 1) 고정된 물체의 축을 전역 좌표의 z축과 동일하게 만든다.(x축회전(alpha만큼), y축회전(beta만큼)) 2) z축에 대해 원하는 만큼 회전 3) 거꾸로 회전시켜 제자리로 복귀한다. (y축회전(-beta 만큼), x축회전(-alpha 만큼)) /*원하는 모델 축을 전역좌표계의 z축과 동일하게 만들기 위한 x축 회전각, y축 회전각을 구한다.*/ //x축 alpha 회전, y->0// alpha = atan2(y, z); //물체의 x축을 alpha 만큼 회전시킨다.// x1 = x; y1 = y * cos(alpha) - z * sin(alpha); z1 = y * sin(alpha) + z * cos(alpha); //y축 beta 회전, x->0// beta = atan2(-x1,..
[MFC] 다른 프로그램이 켜졌을 때 윈도우 창이 뒤로 가도록 하기
Issue MFC에서 다이얼로그를 생성하면 내부에 창이 많을 때 가장 최근에 띄운 창을 제일 상단에 띄우기 위해서 TopMost를 설정하게 된다. 그런데 내가 만든 프로그램에서 최상단에 뜨는 것은 괜찮지만 다른 프로그램(ex. 크롬)창을 띄울 때 조차도 최상단에 위치하게 된다. 일반적으로 가장최근에 띄운 프로그램이 최상단에 와야한다. Solution 다른 창이 띄워지는 것을 감지하고 TopMost설정을 해제해준다. 현재 활성화되어있는 창에서 다른 창이 활성화되는 것을 감지할 수 있다. 1. 클래스 뷰를 켜서 창에 활성화상태 변경을 감지할 수 있는 이벤트 함수를 추가해준다. WM_ACTIVATE 메시지이벤트 함수 추가 2. 현재 프로그램의 창이 비활성화 되었을 때, 다른 프로그램의 창이 활성화되었는지 확인..