본문 바로가기
반응형

hwanshell107

프로그래머스] C++ 해시 - 베스트앨범(Level 3) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다. 아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/42579 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호.. 2020. 1. 30.
프로그래머스] C++ 해시 - 위장(Level 2) 해당 문제는 프로그래머스 코딩테스트 연습에 있는 문제입니다. 아래 링크를 통해 풀 수 있습니다. https://programmers.co.kr/learn/courses/30/lessons/42578 해당 문제는 경우의 수 문제로 공식을 사용해야 합니다. 문자열의 처리를 함과 동시에 카운트를 세는 문제입니다. 공식은 다음과 같습니다. 예를 들어 '티, 바지, 안경' 3가지가 있다고 가정한다면 ((티의 갯수 + 1) * (바지의 갯수 + 1) * (안경의 갯수 + 1)) - 1 입니다. 아래는 완성된 코드입니다. #include #include #include #include #include using namespace std; int solution(vector clothes) { int answer = .. 2020. 1. 30.
프로그래머스] C++ 해시 - 전화번호 목록(Level 2) phone_book에 있는 문자열들 중 접두사가 중복되는 경우가 있으면 false, 없으면 true를 반환하는 문제입니다. 예를들어 예제에 나와있는것 처럼 "119", "97674223", "1195524421" 이 있다고 가정한다면 "119"는 "1195524421"에 중복되므로 false입니다. 반면 "123", "456", "789" 부분은 중복되는것이 없으므로 true입니다. 문자를 하나씩 비교하는 방법도 있지만 비효율적이라는 판단이 서서 트라이(trie)구조로 풀었습니다. 트라이구조는 https://hwan-shell.tistory.com/133?category=771708 에서 확인하시면 됩니다. #include #include #include #define NUMBER 10 using nam.. 2020. 1. 23.
프로그래머스] C++ 해시 - 완주하지 못한 선수(Level 1) 문자를 비교해서 없는문자 1개를 찾는 문제입니다. 여러가지 방법이 있겠지만 저는 participant와 completion 백터를 정렬한 후 비교해서 풀었습니다. #include #include #include using namespace std; string solution(vector participant, vector completion) { string answer = ""; sort(participant.begin(), participant.end()); sort(completion.begin(), completion.end()); for(int i=0; i 2020. 1. 23.
C/C++ IPC인 mailslot에 대한 이해 Mail Slot은 프로세스간에 데이터를 주고받기 위한 방식중 하나입니다. 프로세스는 기본적으로 자신에게 할당된 메모리를 공유할 수 없기 때문에 여러가지 방법으로 데이터를 주고 받습니다. Mail Slot은 파일에 데이터를 적어 놓고 다른 프로세스들이 해당 파일에 접근해서 데이터를 읽어오도록 합니다. 따라서 파일을 읽을 수 있는 함수인 ReadFile() 함수와 데이터를 작성할 수 있는 WriteFile() 함수가 사용됩니다. MailSlot의 특징은 다음과 같습니다. 1. 단방향 통신이다. CreateMailslot() 함수로 보낼 메일 슬롯의 파일을 생성하고 WriteFile()함수를 통해 입력을 하게되고 CreateFile() 함수를 통해 파일을 열어 해당 내용을 읽어올 수 있는 ReadFile().. 2020. 1. 16.
C/C++ 뇌를 자극하는 윈도우 운영체제 프로젝트 2. 윤성우 저자께서 작성하신 "뇌를 자극하는 윈도우 운영체제"의 실습 2번입니다. C언어로 만들어져 있으며 다음과 같은 요구사항을 말하고 있습니다. 1. start 입력시 자식프로세스 생성. 2. start echo "문자열" 입력시, 자식프로세스 생성 후 해당 문자열 출력. 저는 C++을 사용해 구현했으며, Boost의 tokenizer를 사용했습니다. 만든 visualstudio 는 2019 버전을 사용했으며, 다른 버전 사용 시 echo_console.exe 파일 경로가 다를 수 있습니다. 소스코드는 아래와 같습니다. main.cpp #include #include #include #include #include #include #include using namespace std; typedef bas.. 2019. 12. 29.
C/C++ 프로세스 생성하기. C/C++에서 프로세스를 생성하는 방법은 다음과 같습니다. CreateProcess() 함수를 통해 생성하는 방법입니다. CreateProcess() 함수는 다음과 같이 정의되어 있습니다. BOOL CreateProcess{ LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURTIY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFO.. 2019. 12. 29.
c/c++ TCHAR 정리. 요즘은 문자를 처리할 때 유니코드를 주로 사용합니다. WBCS라고 하며 모든 문자와 숫자를 2바이트로 처리합니다. 모든 프로그램이 유니코드를 사용하면 좋겠지만.... 실상은 아니죠. 초창기, 문자열 처리는 아스키코드로 사용해왔고, 아스키 코드는 1바이트로 구성됩니다. 그리고 초창기부터 사용되어 왔던 아스키코드를 지금도 사용하고 있죠. C/C++에선 유니코드를 사용함에 따라 문자열 처리를 1바이트와 2바이트 이 두개를 신경써서 해야 했고, 결론적으로 유니코드를 처리할 수 있는 자료형을 만들어 냅니다. 바로 앞에 w를 붙인 자료형이죠. 아래 자료형 선언은 헤더파일에 정의되어 있습니다. (정확히 말하자면 winnt.h에 있지만 이 해더파일을 Windows.h가 포함하고 있습니다.) char = 1바이트 wch.. 2019. 12. 29.
C/C++] 트라이(Trie) 알고리즘을 만들어보자!! 문자열을 (m log n)의 형태로 빠르게 찾는 알고리즘입니다. 구성은 Tree 형태로 만들어지며 입력은 다음과 같이됩니다. "like, bike, bool, book"을 입력받는다고 가정한다면, 이런식으로 들어가게 됩니다. 여기서 root 노드에서 자식노드로 갈 수 있는 경우의 수는 26가지 입니다. 왜냐???!!! 영어 알파벳은 26개 이기 떄문입니다.(대문자 제외) 그래도 모르시겠다고요??!! 영어 알파벳은 a ~ z 까지 있습니다. 이것의 갯수는 26개 입니다. 그럼 영어 단어들의 첫번째 문자로 올 수 있는 경우의 수는 26가지가 되는 것입니다. 예를들어 apple, banana, like, etc..... apple은 a로 시작하고 banana는 b로, like는 l로 시작합니다. 즉, 시작단어.. 2019. 12. 22.
c++의 move, rvalue, lvalue에 대한 설명....(복잡해요~) 무브...... move........ 사전에 알아야할 것들이 있습니다. 1. 복사생성자(깊은복사). 2. static_cast 3. lvalue, rvalue move에 대해 이해하려면 위 3가지는 반드시 짚고 넘어가야 합니다. 1. 복사생성자에 관해선 이미 글을 올린것이 있으니 참고하시기 바랍니다. · 얕은복사와 깊은복사 : https://hwan-shell.tistory.com/42 · 복사생성자의 호출 과정 : https://hwan-shell.tistory.com/43 2. static_cast에 관해서는 아래 링크를 클릭해 주세요. https://hwan-shell.tistory.com/211 3. lvalue, rvalue는 따로 정의할까 하다가같이 설명하는게 좋을것 같아 move와 같이 설.. 2019. 12. 17.
C++ set 사용법과 설명... set에 대해 설명하고자 합니다. 사용법도요. 아마 set을 사용하려고 검색하셔서 오시게 된 분이시라면, set의 특징을 잘 아시는 분일겁니다. 네, set의 특징은 다음과 같습니다. 1. 숫자든 문자든 중복을 없엔다. 2. 삽입하는 순서에 상관없이 정렬되서 입력이 된다. 이 특징을 모두 만족시킬 수 있는 자료구조는 이진 트리 입니다. 즉, set은 벨런스 트리로 Red-Black 트리로 만들어져 있습니다. 이런식으로 말이죠... 이진트리 특성상 삽입과 삭제가 용이합니다. 자료 찾는것도 준수하고요. 그럼 사용법을 알아보겠습니다. Set의 초기화 set 변수 기본적인 선언방법 set 변수(복사할 변수) 선언 후 복사한 값으로 초기화 set 변수 = 복사할 변수 서언 후 복사한 값으로 초기화 #include.. 2019. 12. 13.
2020 카카오 블라인드 공채 문제 2번 설명 및 풀기 문제 풀러가기 완성된 코드 #include #include #include using namespace std; int index; bool check(const string& p){ int left = 0, right = 0; bool ret = true; stack s; for(int i = 0; i < p.size(); i++){ if(p[i] == '('){ left++; s.push('('); }else{ if(s.empty()) ret = false; else s.pop(); right++; } if(left == right){ index = i + 1; return ret; } } return ret; } string solution(string p) { if(p == "") return ".. 2019. 12. 11.
유니코드와 아스키코드(SBCS, MBCS, WBCS) 원래 코드를 짜면 일반적으로 영문, 숫자를 아스키코드로 컴퓨터는 인식합니다. 따라서 123char c = 65; printf("%c", c); //output : Acs 이런식으로 가능합니다. 이는 아스키코드를 사용해 문자든 숫자든 1바이트로 표현하기 때문인데, 1바이트는 8비트로0 ~ 256까지의 가지수를 표현할 수 있습니다. 하지만 아스키코드는 7비트만 사용합니다. 그 이유는 맨 앞의 1비트는 에러검출을 위해 사용하기 때문이죠. 이렇게 말이죠.... 하지만 시대가 발전하면서 다른 여러 나라들(한국, 일본, 중국, 아랍, 인도 등....)도 컴퓨터를 많이 사용하기 시작했고 그로인해 다른나라의 언어도 표현해야 했습니다. 하지만 1바이트로 문자를 표현하는 것은 자리가 없어서 2바이트로 표현하기로 합니다. .. 2019. 12. 11.
C++ 이진탐색 구현하기(재귀) 이진탐색이란? 정렬되어 있는 배열의 수를 효율으로 빠르게 찾는 방법입니다. 실생활에서 쓰일 수 있는 예로는...... 술게임의 업다운이 있습니다. 물론 해당 숫자를 찾을 때, 50, 25, 17.... 이런식으로 진행하면 안되지만..... 떠오르는 예제가 이것밖에 없내요..ㅎㅎ..... 시간 복잡도는 O(longN) 이며 4,294,967,296개(약 43억개)를 32번만에 찾아낼 수 있는 빠른 알고리즘 입니다. 기초적이지만 재귀함수를 사용해 찾는 방법이라 재귀를 처음 접하거나 익숙하지 않다면 구현이 다소 어렵고 이해하기도 어렵습니다. 이런 좋은 알고리즘이지만 한가지 제약조건이 필요한데, 그것은 숫자가 정렬되어 있어야 한다는 점입니다. 우선 코드를 보겠습니다. #include using namespace.. 2019. 12. 4.
C++ string 사용법 및 기능정리(동작방식) C++에는 string이란 클래스가 있습니다. 이걸 사용하려면 string 헤더파일을 선언해 줘야 하며 다양한 기능을 제공합니다. 그렇다면 string이란 녀석이 왜 생겨났을까?? 기존 C언어에서 문자열 처리를 하려면 상당히 골치 아팠습니다. 특히 가변 길이를 처리할때요. 프로그래머가 손수 메모리를 재 할당 해주거나 그게 아니라면 충분한 문자열 배열을 선언해주거나... 너무 번거롭고 나중에 문제생길 것들이 많았죠... 예상치 못한 결과도 초래했다고 합니다. 그래서 C++에서는 class로 문자열을 감싸고 public을 통해 쉽게 사용할 수 있도록 정의하고 만들었습니다. 그래서 C++은 문자열 사용을 기본적으로 string으로 하고 있습니다. 그렇다면 string에 사용법에 대해 알아보도록 하겠습니다. S.. 2019. 11. 25.
728x90
반응형

스킨편집 -> html 편집에서