2024/11 60

프로그래머스 LV.2 더 맵게

이 문제는 간단한 예외처리 요하므로예외처리를 할 게 딱히 많지 않다.예외 처리의 경우1. scoville의 size()가 2보다 작은 경우에는 비교를 할 수 없다.그 경우에는 K보다 작은지만 체크해 준 뒤 -1을 반환하면 된다.전반적인 로직 간략 설명1. 가장 작은 스코빌 지수 + (두 번째로 작은 스코빌 지수 * 2)는힙을 사용한 우선순위 큐로 관리할 수 있다. 1. 작은 스코빌 지수는 자동으로 정렬이 되므로,top으로 읽어온 뒤 해당 값을 임시로 저장해둔다. 2. pop을 통해 작은 값을 꺼내 준뒤 그 2번째 값을 top으로 읽어온 뒤임시 저장 값에 += 두 번째 * 2 라는 로직을 추가해준다.이후 pop해주기 3. 임시 저장 값을 우선순위 큐에 넣어주면 자동 정렬된다. 위 과정을 조건이 만족할 때 ..

프로그래머스 LV.1 신규 아이디 추천

https://school.programmers.co.kr/learn/courses/30/lessons/72410 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   해당 문제는 결국 규칙에 맞는 아이디를 추천하는 것이다.아이디 규칙은 다음과 같다. 아이디의 제한 사항은 다음과 같다.  string solution(string new_id) { string answer = ""; // 소문자 치환 // 레퍼런스는 포인터를 쓰는 것과 같음. for (char& ch : new_id) { ch = tolower(ch); } // 숫자, 빼기, 밑줄, 마침표 ..

범용 데이터 구조

템플릿으로 범용 데이터 구조와 알고리즘 구현 템플릿을 이용하면 범용 구조체 타입 또는 클래스 형태를 생성할 수 있다. 가능하면 데이터 구조와 알고리즘을 프로그램에 특화된 방식으로 만들지 말고, 최대한 범용적으로 만든다. 템플릿이 아닌 범용 데이터 구조 구현 방법 템플릿 말고 다른 범용 데이터 구조는 얼마든지 만들 수 있다. 좀 구식이긴 하지만 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.2 전화번호 목록

https://school.programmers.co.kr/learn/courses/30/lessons/42577 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 해당 문제는 전화번호가 접두어인가? 를 판별하면 된다.접두어이면 FASLE, 아니면 TRUE를 반환한다. 제한 사항폰북의 길이가 1 ~ 1000000이다.각 전화번호의 길이는 1 ~ 20 사이이다.같은 전화번호는 중복해서 들어가 있지 않다 해당 문제의 접근법은 3가지가 있다. 1. 반복문을 활용    - 시간이 너무 오래 걸린다. 폰북의 길이가 너무 길다.   - 이중 루프를 돌게된다.(양방향 비교) 2. 정렬과 반복문을 활용   - 이중 루프..