2024/11 57

범용 데이터 구조

템플릿으로 범용 데이터 구조와 알고리즘 구현 템플릿을 이용하면 범용 구조체 타입 또는 클래스 형태를 생성할 수 있다. 가능하면 데이터 구조와 알고리즘을 프로그램에 특화된 방식으로 만들지 말고, 최대한 범용적으로 만든다. 템플릿이 아닌 범용 데이터 구조 구현 방법 템플릿 말고 다른 범용 데이터 구조는 얼마든지 만들 수 있다. 좀 구식이긴 하지만 C, C++의 void*가 해당 예시이다. 하지만 이 방법은 타입 세이프(안정적)하지 않다. C++17부터는 void*와 템플릿을 사용하지 않고 std::any 클래스를 사용하는 방법이 있다. 객체 타입이 무엇이든 any클래스에 저장할 수 있다. std::any 내부에서 void*를 사용하지만, 본래 타입(자료형)을 저장해두기 때문에 안정성을 보장한다. 템플릿을 사..

벌써 24년 11월 중순이네...내년 목표 세워야지

올해는 기본기 위주로 공부한 감이 있다.기본기가 아직 탄탄한 거 같진 않지만,어쨌든 전반적인 시간은 기본기에 집중됐다.내년부터는 기본기도 기본기지만,실무에 적합하게 쓰일만한 실용적인 결과물 위주의 공부도 집중해보자.내년에는 회사 업무 적응을 위해 실무위주로 공부해보자.개인 프로젝트 착실히 해나가면서배워나간 지식이나 배우게 되는 지식을코드에 녹여내는 경험을 길러보자.이를 토대로 실력을 다듬어서실무에 적용해볼 만한작은 프로젝트를 따로 제작하면서회사에 도움될 만한 실력 위주로 갈고 닦아나가자.그럴려면 일단,지금 진행하던 기본기 공부는 그대로 가져가되조금 더 개인 시간을 빼서 프로젝트에 투자하자.공부는 아는 걸 자주 접하는 것도 좋지만,모르는 걸 해야 실력이 늘어난다.잊지말자.주중엔 회사에서 배우고 익히고주말엔..

프로그래머스 LV.2 의상

https://school.programmers.co.kr/learn/courses/30/lessons/42578 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 해시를 이용한 해결책 1. 종류별로 분류 2. 입지 않는 경우 (해당 종류를 쓰지 않는 경우) 3. 전체 조합 즉 해당 종류별로 의상의 개수를 곱해주면 된다.#include #include #include using namespace std; int solution(vector clothes) { int answer = 1; // 옷을 종류별로 구분 unordered_map m; for (vector clothe : clothes) { m[cl..

OOP - 상속

상속의 특징다른 클래스의 특성들을 내려 받는다. Base Class 부모 클래스 Derived Class 자식 클래스 파생 클래스의 개체는 다음의 것들을 가진다.베이스 클래스의 멤버 변수베이스 클래스이 멤버 메서드자신의 생성자와 소멸자 파생 클래스는 멤버 변수 및 메서드 추가가 가능하다. 상속은 is a관계를 가진다. 상속의 이점상속을 쓰는 가장 간편한 이유는 부모 클래스가 올바르게 제대로 작동하고 있다는 가정 하에, 자식 클래스가 부모 객체가 가진 변수들은 다 부모에게 넘긴다. 그렇게 되면 자식 클래스는 자신의 변수들만 제대로 관리하면 된다. 예시 코드)Cat::Cat(int age, const char* name) : Animal(age) { size_t size = strlen(name)+1; mN..

프로그래머스 LV.2 영어 끝말잇기

https://school.programmers.co.kr/learn/courses/30/lessons/12981 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   해당 조건을 보면,return 처리의첫 번째 조건은 중복된 경우일 때두 번째 조건은 마지막 단어의 끝 알파벳과 현재 단어의 시작 알파벳이 다른 것일 때 따라서 return 처리의 if문 안에는 두 가지 조건을 걸러낼 수 있어야 한다. 중복된 경우가 조건이라면map이 적합하다.map은 중복을 허용하지 않기 때문이다. 그럼 단순 반복문을 통해 해당 조건에서 return 해야할 값을 구해보자. 틀린 사람이 몇 번째 사람인지는for문의 (i % n..

프로그래머스 LV.2 소수 찾기

https://school.programmers.co.kr/learn/courses/30/lessons/42839 제한사항은 다음과 같다.  예시로 1과 7의 숫자 카드가 주어지면,7하나 17하나, 71 이렇게 총 3개의 소수를 만들 수 있다. 마찬가지로0, 1, 1 의 숫자카드로는11, 101 이렇게 2개의 소수를 만들 수 있다. 그럼 이 문제를 어떻게 접근할 것인가? 1. 재귀함수를 활용하는 방법2. 반복문을 활용하는 방법 1. 재귀함수를 활용하는 방법재귀를 활용하면 다음과 같은 과정을 거친다.  재귀를 통해 모든 숫자 조합을 하나씩 만들어준다 STL의 set을 사용해서 중복되는 조합을 제거해준다. 지금 만들어진 숫자가 소수인지 판별한다. 이렇듯 소수인지 아닌지 판단하고 싶을 때가장 기본적으로 에라토..

프로그래머스 LV.1 완주하지 못한 선수

https://school.programmers.co.kr/learn/courses/30/lessons/42576 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 해당 문제는 크게 2가지 해법을 가진다.1. sort를 통한 단순 비교로 계산할 수 있는 경우2. 해쉬맵을 이용하여 통과한 선수를 제거하는 경우 sort는 비교적 쉽다.STL을 익숙하게 사용하기 위해 다음과 같이 코드를 짰다. #include #include #include using namespace std;string solution(vector participant, vector completion) { string answer = ..

연산자 오버로딩을 남용하는 것

남용하여 나만의 의미로 만들면협업의 효율성이 떨어질 수 있다.자유도가 높은 언어일 수록애매하게 쓰지 않도록 함수로 만드는 것이 좋다. (ex 자바처럼)가령 다음과 같이벡터 *= 벡터 의 코드와 같은 경우에연산자 오버로딩을 사용했다면 해당 경우가 벡터 곱샘이 외적인지 내적인지 모호성을 띄게 된다.이를 함수로 명확히 이름을 통해 알 수 있도록 코드를 제작하여,dotproduct 인지 crossproduct 인지 명확한 이름을 사용하여 함수를 짠다면가독성도 높고, 해당 코드에 대한 의미가 명확해진다.대입 연산자와 복사 생성자의 유사성복사 생성자와 대입 연산자는 거의 비슷하지만차이점은대입 연산자는 메모리를 해제해 줄 필요가 있을 수 있으며,대입 연산자는 이미 만들어 진 객체를 쓰고복사 생성자는 방금 생성된 객체..

프로그래머스 LV.2 피로도

https://school.programmers.co.kr/learn/courses/30/lessons/87946 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr푸는 방법은 크게 2가지이다. 1. 배열의 모든 경우의 수를 싹 돌아보는 것2. DFS로 푸는 것이다. 1번째의 경우에는 next_permutation 알고리즘을 써서 모든 경우의 수를 탐색할 수 있다. next_permutation함수는 std의 algorithm 라이브러리 안에 내장된 함수이다.next_permutation함수는 해당 집합의 모든 순열을 구해준다. 예를 들어 {1,2,3}이라는 원소를 가진 집합이 있다면{1,2,3}{1,3,2..