반응형

c++ 49

[ C++ ] #24416 알고리즘 수업 - 피보나치 수 1

알고리즘시간에 배운 동적프로그래밍 문제를 하나 가져와봤다. 의사코드를 한번 보면 재귀호출은 들어온 숫자(n)이 1이나 2가 아니라면 n-1과 n-2를 인자로 재귀호출하여 더해준다. 만약 6이 들어온다면 f(6) → f(5) + f(4) → ( f(4)+f(3) ) + ( f(3)+f(2) ) → ( ( f(3)+f(2) ) + ( f(2)+f(1) ) ) + ( ( f(2)+f(1) )+1 ) → ( ( ( f(2)+f(1) )+1 ) + ( 1+1 ) ) + ( (1+1 )+1 ) → ( ( ( 1+1 )+1 ) + 2 ) + 3 → 8 동적프로그래밍 의사코드를 보면 인자로 들어온 n만큼 배열을 만들어서 인덱스 1,2, 에는 1을 넣어주고 나머지 인덱스에는 앞에 두자리를 더한 값을 넣어준다. 하지만 '..

BOJ/[ BOJ ] C++ 2022.11.22

[ C++ ] #25305 커트라인

오랜만에 푸는 문제이기 때문에 별로 워밍업이 되지 않을까 하는 문제를 가져왔다 (풀어봐야알겠지만..) 처음에 들어오는 값은 학생 수(N) 이고 두번째 들어오는 값은 상을 받는 사람들(k)일 것이다. 그다음에는 점수들이 쭉 나열이 된다. 점수들을 오름차순으로 저장하고 k등 한 사람을 return 해주면 될 것이다. 점수가 중복이 되면 어떡하지..?라는 고민이 들지만.. 누가 상을 받냐? 가 아니라 점수의 커트라인이 몇이냐 이기 때문에 상관없을 것 같다. list를 이용하여 한번 코드를 짜봐야겠다. 분명 맞게 짠거같은데..게속 결과가 0만 나왔다... k번째까지 출력해봐도 0만 계혹 나왔다. iterator의 오류일까 싶어서 봤지만 아무리 봐도 맞았다. 원인은..! list score(N); 으로 초기화를 ..

BOJ/[ BOJ ] C++ 2022.11.18

[ C++ ] #2577 ( 숫자의 개수 )

어떻게 각 자리 숫자를 확인할까 하다가 몇자리인지 확인하고 그만큼 반복하며 일의자리 수 체크 10으로 나누기를 했다. 하지만 훨 간단한 방법이 있었다. 난 몇번반복하는가에 대하여 고민을 많이 했는데 이를 한번에 해결할 방법이 있었다. 밑에 주석처리 해놨으니 참고하면 될 것 같다. #include #include using namespace std; int main() { int a, b, c,sum; int num[10] = { 0, }; cin >> a >> b >> c; sum = a * b * c; int D=10,B=1; while (sum>D) { D *= 10; B++; } for (int i = 0; i < B; i++) { num[sum % 10]++; sum /= 10; } /* whil..

BOJ/[ BOJ ] C++ 2022.02.20

[ 11강 ] 연결리스트 (Linked List)

연결리스트 (Linked List) - 데이터를 저장한 노트들을 포인터로 연결한 자료구조 - 동적인 자료구조 : 노트를 리스트에 추가하거나 제거함 - 생성, 탐색, 삽입, 삭제 가능 - 하나의 리스트의 각각의 노드는 연속된 공간이 아니라 힙 공간에 분산되어 위치된다. 장점 원소의 재배열이 쉽다 메모리의 낭비를 맞을 수 있다 (동적이기에) 단점 포인터를 위한 공간 소비 동적 메모리의 관리가 필요하다 리스트 중간의 원소로 직접 접근 불가 (순차접근 가능) 종류 단순 연결 리스트 이중 연결 리스트 환형 리스트 이중 환형 리스트 단순 연결 리스트 노드들을 일렬로 연결한 것 각 노트는 자료값과 다음 노드에 대한 포인터로 이루어짐 이전 노드를 바로 접근할 수 없다. CLinkedList::CLinkesList(){..

[ C++ ] 10강. 깊은 복사, mutable, friend, static 멤버변수/함수

깊은복사 얕은 복사를 하면 주소값도 옮겨지기 때문에 소멸과정에서 오류가 난다 이에 내용은 같고 메모리는 다르게 만들어 줄 수 있도록 복사 생성자를 수정해줘야한다 //깊은 복사, 복사생성자 수정 예시 ArrayData::ArrayData(const ArrayData& copy) // 자기 자신이 인자로 들어올 때 : capacity(copy.capacity), used(copy.used) // 들어온거랑 똑같이 멤버변수 세팅 { data = new double[capacity]; // 동적할당은 새로운 매모리에 for (int i = 0; i < used; i++) // 내용은 모두 똑같이 복사 data[i] = copy.data[i]; } const 추가적인 내용 - const 객체 생성가능, const..

[ C++ ] 9강. 실습, 얕은 복사

실습하면서 알게된 점 1. 원본 데이터를 수정하고싶으면 &로 리턴해주면 된다 2. this는 클래스의 포인터 타입이다. 3. 포인터 타입은 -> 를 사용해야한다. 얕은 복사 Simple sum2(sim1) - 복사생성자를 생성하지 않아도 저절로 생성된 - 내용만 복사됨 문제점 - 동적할당 된 내용을 복사한다면, 주소값도 값이 복사되기 때문에 소멸될 때 런타임 오류가 일어남. -> 깊은 복사로 해결 가능 //lec9_Salesman.h #pragma once #include using namespace std; class Salesman { private: string name; double sales; public: Salesman(); ~Salesman(); Salesman(string name, do..

[ 8강 ] 클래스 (const 멤버함수, 생성자, 소멸자)

const 멤버함수 int GetX() const; // const 멤버함수 선언 - 클래스 내에서만 선언 가능 - 동일 클래스에 선언 된 멤버변수 값 변경 불가능 - const 객체는 cont 함수만 호출 가능 생성자 생성자 : 객체가 생성될 때 자동으로 호출되는 함수 : 클래스와 이름은 동일하지만 return 값이 없다 (오버로딩 가능) : 생성자가 하나라도 있으면 디폴트 생성자 기능 사라짐 이니셜라이저 생성자에서만 사용가능 생성하고 대입하는데 아니라 인자있는 형태로 생성되게 한다 Rectangle::Rectangle(const int& x1, const int& y1, const int& x2, const int& y2) :upLeft(x1,x2),loRight(x2,y2) {} 멤버변수도 초기화 ..

[ C++ ] 7강. 클래스, 객체지향 프로그래밍

클래스 구조체 - 사용자 정의 데이터 타입 - 연관있는 데이터를 하나로 묶음 클래스 = 구조체 + 함수 클래스에 접근제어자를 붙이지 않으면 모두 private 이다 접근 제어자 public 어디서든 접근허용 protected 상속관계에 놓여 있을 때, 유도 클래스에서의 접근허용 private 클래스 내에서만 접근 허용 // 클래스 생성 예시 class Car{ private: char ID; int speed; public: void showState(); void Accel(); }; 주의해야할 점 - 클래스 멤버에 초기값 주지 않기 (객체에서 주기) Lamp클래스와 User클래스를 만들어거 유저가 램프를 컨트롤하는 프로그램 // 해더파일 #pragma once #include class Lamp { ..

반응형