본문 바로가기
0812 리눅스 • 환경virtualbox + extension packubuntu 24.04  • 리눅스 명령어 - alias alias 별칭=명령어 형태로 명령어에 별칭을 추가 가능alias c=clearunalias c clear 명령어를 c라는 별칭으로 등록하고 등록한 별칭 c를 없애는 코드 - 백그라운드 작업명령 끝에 &를 붙여서 여러 명령 동시에 수행 가능 - 파이프 & 리다이렉션  명령이나 프로그램 수행 결과를 다른 명령어나 프로그램으로 전달 ps > ps.txt ps 명령어 결과를 ps.txt에 저장한다 - 환경변수export PATH=/bin:/usr/bin:/sbin:/usr/sbin환경변수를 변경 - 초기화 스크립트.bashrc 파일이 로그인할때 자동으로 실행된다 echo "alias c=clear".. 2024. 8. 12.
0808 Qt 메세지박스, 자료구조 • QMessageBox위와 같은 알림 창을 만들기슬롯을 선언하고 슬롯에서 QMessageBox::question 메서드를 호출해서 어떤 창을 띄울건지를 구현한다void QtEditor::help(){ QMessageBox::question(this,"QMessageBox::showQuestion()", "Qusetion Message", QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);} • 파일 입출력void QtEditor::openFile(){ QString filename = QFileDialog::getOpenFileName(this, "select file to open", ".", "Text File(*.txt *.c .. 2024. 8. 8.
0807 QT 에디터 & 액션 • 에디터#include "qteditor.h"#include #include #include #include QtEditor::QtEditor(QWidget *parent): QMainWindow(parent){ QTextEdit *text = new QTextEdit(this); setCentralWidget(text); //상단에 메뉴바 생성 QMenuBar *bar = new QMenuBar(this); setMenuBar(bar); //메뉴바에 메뉴 넣기 QMenu *fileMenu1 = bar->addMenu("&파일"); QMenu *fileMenu2 = bar->addMenu("&편집"); QMenu *fileMenu3 = bar->addMe.. 2024. 8. 7.
0805 QT C++ 다양한 ui, 시그널 • QT 시작qt console app 으로 프로젝트 시작cmake 빌드 -프로젝트 생성해서 디버그 찍어보기#include int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); qDebug("Hello Qt"); qDebug()  - 온클릭 이벤트#include #include #include int main(int argc, char *argv[]){ QApplication a(argc, argv); QWidget w; QLabel hello(" Hello Qt! ",&w); hello.resize(75,35); QPushButton quit("quit",&w); quit.move(10,40.. 2024. 8. 5.
백준 1926 : 그림 (BFS) 문제어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로로 연결된 것은 연결이 된 것이고 대각선으로 연결이 된 것은 떨어진 그림이다. 그림의 넓이란 그림에 포함된 1의 개수이다.입력첫째 줄에 도화지의 세로 크기 n(1 ≤ n ≤ 500)과 가로 크기 m(1 ≤ m ≤ 500)이 차례로 주어진다. 두 번째 줄부터 n+1 줄 까지 그림의 정보가 주어진다. (단 그림의 정보는 0과 1이 공백을 두고 주어지며, 0은 색칠이 안된 부분, 1은 색칠이 된 부분을 의미한다)출력첫째 줄에는 그림의 개수, 둘째 줄에는 그 중 가장 넓은 그림의 넓이를 출력하여라. 단, 그림이 하나도.. 2024. 8. 4.
백준 5430 : AC (덱) 문제선영이는 주말에 할 일이 없어서 새로운 언어 AC를 만들었다. AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다.함수 R은 배열에 있는 수의 순서를 뒤집는 함수이고, D는 첫 번째 수를 버리는 함수이다. 배열이 비어있는데 D를 사용한 경우에는 에러가 발생한다.함수는 조합해서 한 번에 사용할 수 있다. 예를 들어, "AB"는 A를 수행한 다음에 바로 이어서 B를 수행하는 함수이다. 예를 들어, "RDD"는 배열을 뒤집은 다음 처음 두 수를 버리는 함수이다.배열의 초기값과 수행할 함수가 주어졌을 때, 최종 결과를 구하는 프로그램을 작성하시오.입력첫째 줄에 테스트 케이스의 개수 T가 주어진다. T는 최대 100이다.각 테스트 케이스의 첫째 줄.. 2024. 8. 4.
백준 1021 : 회전하는 큐(덱) 문제지민이는 N개의 원소를 포함하고 있는 양방향 순환 큐를 가지고 있다. 지민이는 이 큐에서 몇 개의 원소를 뽑아내려고 한다.지민이는 이 큐에서 다음과 같은 3가지 연산을 수행할 수 있다.첫 번째 원소를 뽑아낸다. 이 연산을 수행하면, 원래 큐의 원소가 a1, ..., ak이었던 것이 a2, ..., ak와 같이 된다.왼쪽으로 한 칸 이동시킨다. 이 연산을 수행하면, a1, ..., ak가 a2, ..., ak, a1이 된다.오른쪽으로 한 칸 이동시킨다. 이 연산을 수행하면, a1, ..., ak가 ak, a1, ..., ak-1이 된다.큐에 처음에 포함되어 있던 수 N이 주어진다. 그리고 지민이가 뽑아내려고 하는 원소의 위치가 주어진다. (이 위치는 가장 처음 큐에서의 위치이다.) 이때, 그 원소를 주.. 2024. 8. 3.
modern c++ • constexpr C++에서는 매크로보다 constexpr 상수로 사용하는 걸 권장한다#define SIZE 10 // C-styleconstexpr int size = 10; // modern C++ • 초기화중괄호 안에 다 박을 수 있다#include #include using namespace std;struct S { string name; float num; S(string s, float f) : name(s), num(f) {}};int main() { S s1("Norah", 2.7); S s2("Frank", 3.5); S s3("Jeri", 85.9); // Basic initialization vector v; v.push_back(s1); v.push_back(s2); v.p.. 2024. 7. 31.
c++ 코딩테스트 풀면서 알게 된 것들 기록 덱에서 특정 원소 인덱스 구하기int idx = find(DQ.begin(), DQ.end(), t) - DQ.begin(); find 함수만으로 하지 않고 -DQ.begin()으로 이터레이서 반복자를 빼 줘야 정확한 특정 원소 인덱스가 나온다 덱이 아닌 벡터, 리스트 등에서도 사용 가능하니 사용방법을 잘 익혀두자  12345를 입력받을때 1 2 3 4 5로 각각 숫자로 받으려면..char로 받고 - '0' 해주면 된다! 2024. 7. 31.
스마트 포인터 • unique_ptr 특정 객체를 가리키는 하나의 스마트 포인터복사 새성자와 복사 대입 연산자 불가능 - 사용법unique_ptr 스마트 포인터명(new 클래스)unique_ptr 스마트 포인터명 = make_unique(인수); 가능하면 new로 하지 말고 make~로 할것 클래스를 스마트 포인터로 호출해보면 따로 delete 하지 않아도 소멸자가 자동으로 호출된다class T {public: T() { cout ptr = make_unique(); cout   - 상속관계class T {public: T() { cout ptr2 = make_unique(); cout  위와 같은 상속 관계에서 잘 동작한다 -재귀 호출#include #include using namespace std;void f.. 2024. 7. 31.
예외 처리 #include using namespace std;void f1(); void f2(); void f3();class Test { int id;public: Test(int n) { id = n; cout  위 코드를 실행하면 동적할당한 경우 메모리 해제가 잘 되지 않아 소멸자가 호출퇴지 않는다 2024. 7. 31.
c++ 입출력 시스템 텍스트 파일 생성해서 저장하는 코드int main() { ofstream fout; fout.open("song.txt"); if (!fout) { cout  클래스에서 계산값을 '#include #include #include using namespace std;class Circle { int radius;public: void setRadius(int radius); double getArea(); friend ofstream& operator 2024. 7. 30.
람다식 • 람다식f(x + y)를 (x + y) -> x + y 형태로 표현한다 - x+y를 출력하는 람다 메서드에 2+3한 값을 넣어서 출력[](int x, int y) {cout  -람다 메서드를 auto 타입으로 변수로 만들어두고 재활용해서 사용하는 코드, 이 패턴을 잘 알아두자 auto sum = [](int x, int y) {cout  -람다 메서드에 외부 변수 값을 넣어서 계산하는 코드 double pi = 3.14; auto calc = [pi](int r) -> double { return pi * r * r; }; - 참조 형으로 넘겨준 인자에 값을 람다식 안에서 갱신하는 코드 double pi = 3.14, res = 0; auto calc = [&pi, &res](int r) -> doub.. 2024. 7. 30.
템플릿 & STL • 함수 중복의 약점함수 중복은 매개변수 이외의 코드가 중복되어 비효율적이다 • 템플릿 선언을 이용한 swap 함수template나 template 형태로 제네릭 타입을 선언하고 사용한다#include using namespace std;templatevoid myswap(T& a, T& b) { T tmp; tmp = a; a = b; b = tmp;}int main() { int a = 4, b = 5; cout  템플릿을 이용하면 재사용성이 증가하지만 포팅에 취약하고 디버깅이 어려워진다 • 템플릿 스택 코드#pragma once#include using namespace std;template class MyStack{ int size; T* arr; int top = -1;public: MySta.. 2024. 7. 29.
상속, 오버라이딩, 추상화 • 상속 기본 클래스  #include "Point.h"void Point::showPoint() { std::cout x = x; this->y = y;} point를 상속받는 클래스 ColorPoint헤더#pragma once#include "Point.h"#include #include class ColorPoint : public Point { std::string color;public: void setColor(std::string color); void showColorPoint();};구현#include "ColorPoint.h"void ColorPoint::showColorPoint() { std::cout color = color;} 메인#include .. 2024. 7. 29.
파일 시스템 • 파일보조장치에 의미 있고 관련 있는 정보를 모아둔 논리적 단위파일은 이름, 파일 실행 정보, 메타데이터(속성)로 이루어진다 • 파일 속성파일 시스템은 파일별로 아래와 같은 속성을 유지하고 관리한다-유형 (확장자로 구분되는 파일 유형)-크기-보호-생성 날짜-마지막 접근 날짜-마지막 수정 날짜-생성자-소유자-위치 파일 연산은 운영체제에 의해 시스템 호출이 되서 아루어진다 • 디렉터리 디렉터리 = 폴더 파일을 관리하기 위해서 사용옛날옛적에는 OS에 하나의 디렉터리만 존재하는 1단계 디렉터리 구조였고1단계 디렉터리로는 파일을 관리하기 어려워서 트리 구조 디렉터리가 되었다 • 절대 경로같은 디렉터리에는 동일한 이름의 파일이 존재할 수 없지만, 서로 다른 디렉터리에서는 있을 수 있다루트 디렉터리부터 자기까지 오.. 2024. 7. 28.
메서드 오버로딩 & 디폴트 매개변수 & static & 프렌드 & 연산자 오버로딩 • 메서드 오버로딩이름이 같고 인자가 다른 메서드를 이용해서 다형성을 구현인자가 모호하면 오버로딩이 불가능하다#include #include #include #include using namespace std;int getMin(int a, int b) { return (a > b) ? b : a;}double getMin(double a, double b) { return (a >=b) ? b : a;}string getMin(string a, string b) { return (a.compare(b) > 0) ? b : a;}int getMin(int arr[], int size) { int min = INT16_MAX; for (int i = 0; i  • 디폴트 매개변수 디폴트 매개변수는 함수의 .. 2024. 7. 26.
C++ 객체지향 프로그래밍 • 클래스와 객체#include using namespace std;class Rectangle {public : int width; int height; Rectangle(int width, int height); Rectangle(); int getArea() { return width * height; }};Rectangle::Rectangle() { width = 5; height = 10; cout width =width; this->height = hegiht; cout  • 생성자 중복 테스트 #include using namespace std;class Rectangle {public : int width = 1; int height = 1; Rectangle(int width, int .. 2024. 7. 25.
컴파일러 최적화 • 변수별 특성 • 재귀함수 최적화#include #if TCASE==1 //재귀int fact(int n) { if((n==1) || (n==0)) return 1; else return n * fact(n-1);}#elif TCASE==2 //goto로 하는 루프int fact(int n) { int i=1, rst=1; if(n==0) return 1;loop: if(i 재귀,goto,반복문으로 팩토리얼 연산을 하는 소스코드를 컴파일한 후 디스어셈블해서 비교 - 컴파일, 디스어셈블리 명령어gcc recursiveFunc.c -g -DTCASE=3objdump -d -S a.out > r3 재귀  함수는  반복적인  처리를  짧은  코드와  효과적인  처리로  편의를  제공하지만, 함수의  반복적인 .. 2024. 7. 23.
보이드 포인터를 이용한 제네릭 프로그래밍 보이드 포인터를 이용한 제네릭 기법은  코드의  재사용성을  높이고, 유연성을  제공하여  다양한  데이터  타입에  대해  반복적인  코드  작성을  줄일  수  있다. Generic Programming은 일반적으로  컴파일  시점에 타입 안전성을  보장하며,코드의 성능 최적화에도 도움을 줄 수 있다. 복잡성을  줄이고  유지보수성을  향상시키는데  기여할  수  있다. • 타입에 상관없이 정렬되는 프로그램 1. 함수 포인터로 인자를 받는다2. 받은 인자의 타입에 따라 다른 정렬 메서드를 작성한다간단해 보이지만 굉장히 복잡했다C에서의 제네릭 - (void*)  형태 #include #include #include #include "swap.h"#define NAME_SIZE 20//void*로 주소를.. 2024. 7. 23.