C++: 문자열

index

#include <string>

string str = "0123456"; // 기본적인 생성자
str.size();             // 7
str.front();            // 첫 char, 0
str.back();             // 마지막 char, 6

추가/제거

추가: append, insert

string str = "0123456"
str.append("str");         // "0123456str"
str.append("01234", 2, 2); // "012345623", index:2부터 length:2개
str.insert(3, "str");      // "012str3456"

제거: clear, erase

string str = "0123456"
str.clear(); // ""

string::iterator iter1 = str.begin();
string::iterator iter2 = str.end();
iter1 += 1;
iter2 -= 1;

str.erase(3);     // "012"
str.erase(2, 2);  // "01456"
str.erase(iter1); // "023456"
str.erase(iter1, iter2); // "06"

수정/변환

수정: replace // @todo: replace

변환: substr

string str="0123456";
str.substr(3);        // "3456"
str.substr(3, 2);     // "34"

검색/비교

검색: find

string str = "0123456";
str.find("2");            // 2
auto pos = str.find("8"); // pos == string::npos

비교: compare

string str1 = "ab";
string str2 = "bc";
string str3 = "Ab";
string str4 = "Ac";
string str5 = "A";
string str6 = "A";
string str7 = "z";
string str8 = "";

// A.compare(B): A<B 인지, A>B 인지 검사, A<B라면 0보다 작은 값, A>B라면 1, A==B라면 0보다 큰 값
auto a1 = str1.compare(str2); // c<0, 첫 번째 char 부터 차례대로 검사: a < b 이므로
auto a2 = str1.compare(str3); // c>0, a > A
auto a3 = str3.compare(str4); // c<0, index=0, A == A, index=1, b < c
auto a4 = str4.compare(str5); // c>0, c > ""
auto a5 = str5.compare(str6); // c==0, A == A
auto a6 = str6.compare(str7); // c>0, A < z
auto a7 = str7.compare(str8); // c>0, z > ""

자료구조: priority_queue

연산

#include <queue>

// 초기화 2가지
// 1. vector에서 복사
// 내림차순 정렬이 기본 정렬
vector<int> vec{1, 2, 3, 4, 5}
priority_queue<int> pq1(vec.begin(), vec.end());
print(pq1); // 5 4 3 2 1 (기본: 내림차순)

// 2. 내림차순 / 오름차순 정렬
// <자료형, vector<자료형>, greater/less<자료형>>
priority_queue<int, vector<int>, greater<int>> pq2;

시간복잡도

  • push(): O(logN)
  • pop(): O(logN)
  • top(): O(1)
  • order: O(logN)

참고

알고리즘: 프로그래머스: 라면공장

알고리즘: 프로그래머스: 라면공장

참고

라면공장

자료구조: priority_queue

풀이 (1차)

  • stock에 남아있는 밀가루가 충분하다면, 현재 날짜까지 밀가루가 공급된 수량 중 큰 순서대로 공급하면 된다.
  • 큰 수량 부터 차례대로 받을 수 있는 자료구조가 필요하다.
  • 우선 순위 힙 (priority_queue) 를 사용한다.

  • priority_queue에는 supplies를 담는다.

풀이 (2차)

  • stock < istock <= i 로 수정
  • i 는 0일 부터 시작
  • 따라서 istock이 같을 때 밀가루 공급

#include <string>
#include <vector>
#include <queue>

using namespace std;

int solution(int stock, vector<int> dates, vector<int> supplies, int k) {
	int answer = 0;

	priority_queue<int> supplyPQueue;

	int j=0;
	for (int i=0; i<k; i++) {
		// 공급 받는 일정일 때, queue에 저장한다.
		if (i == dates[j]) {
			supplyPQueue.push(supplies[j]);
			j += 1;
		}

		// 저장된 stock 이 i보다 작아진다면
		// queue에 저장했던 밀가루를 pop
		if (stock <= i) {
			stock += supplyPQueue.top();
			supplyPQueue.pop();
			answer += 1;
		}
	}
	return answer;
}

코드

noodle.cpp

케라스: 수치입력 다중클래스분류 모델

데이터 입력

code2idx = {'c4': 0, 'd4': 1, ... }
idx2code = {0: 'c4', 1: 'd4', ... }

즉, code2idx는 코드를 숫자로, idx2code는 숫자를 코드로 만드는 코드

참고

순환 신경망 모델 만들어보기

수치 입력 -> 다중 클래스 분류

  • 입력값이 주어졌을 때, 클래스를 분류하기 위해 “one-hot 인코딩”을 사용
    • 삼각형, 사각형, 원을 구분한다고 하면, 삼각형은 [1, 0, 0], 사각형은 [0 1 0], 원은 [0 0 1]
    • 케라스에서 제공하는 to_categorical() 함수로 처리 가능

레이어: softmax

  • 활성화 함수
  • 입력되는 값을 클래스별로 확률 값이 나오도록 출력

20 07 22 피드백을 명확하게 할 것

하고 싶은 일이 많아 벌려 놓은 일이 많다. 하지만 벌려 놓은 일이 많기 때문에 시작 했던 일을 제대로 끝마치지 않고, 문제를 끝내버린다. 그리고 일을 제대로 끝마치지 않았기 때문에 다시 보면 그 당시의 내가 생각나 다시 쳐다보지 않는다. 시작했던 일로 얻은 기술은 있을 수 있으나, 한 일에 대한 정리를 하지 않는다면 제자리다. 내가 하고 있는 / 했던 일이 똑같이 주어졌을 때, 할 수 있어야 한다. 피드백이 확실 해야한다.

일을 제대로 끝맺는 법을 배워야한다. 할 일에 대해 피드백이 이루어 지지 않기 때문에, 시작 한 일은 많지만, 결국 제자리다.

서버나 컴퓨터에 파일을 정리하는 것도 마찬가지다. 얻은 정보나 작성한 파일을 여러군데 저장했다. 정리가 되지 않는다. 결국 내가 뭘 하고 있는지 길을 잃어 버리는 것이다. 언젠가 지금 뭘 하는지 모른채 둥둥 떠다니는 배 같아요. 라고 말 한 적이 있는데 이런 의미였나보다. 나는 내가 지금 뭘 하고 있는지도 모른채, 주어진 일만 하고 있다. 내가 주도해야한다. 해야 할 일을 명확하게 한다. 지금 상황이 어떤 지 내가 잘 알아야한다.

나는 구체적인 실행방안이 필요하다.

1) 실행을 방해하는 요소를 찾아야 한다. 2) 실행할 수 있는 환경을 만들어야 한다. 3) 해본 적이 있다면 잘 됐던 기억을 떠올려본다. 4) 자신의 강점을 알고 그 강점과 연결시킨다.

결국 피드백 하는 시간을 명확히 할 것.

실행을 방해하는 요소는 어떤게 있을까?

실천해야지 라는 흩어진 생각을 붙잡아야 하는데, 스마트폰을 하고 나면 그 생각이 없어져 버린다. 결국 A를 하다 일을 마무리 하지 못하고 B를 한다.

-> 전에 내가 효율이 가장 좋았던 시기를 돌이켜보면 항상 일기를 제대로 썼다. 한시간 이상 하루를 돌아보는 시간을 가졌다. 러프하게 일기를 쓰다가도 오늘 느꼈던 감정이나 행동을 제대로 정리하고 피드백했다. 일을 제대로 끝 맺는 연습을 하자. 다시 한번 읽어보고.

20 07 04 내 다음 찾기 워크숍 (1)

인재상 트렌드

2020 카카오 채용 공고를 통해 인재상 트렌드를 알아봤다. 이 시대에 필요한 것은 무엇일까?

  • 단순히 직무 분야만 잘 하는 사람을 뽑는게 아니다.
  • 최초 메신저로 시작한 기업이지만, 다양한 분야 ( 모빌리티, 금융, 작가, 음악 ) 에서 많은 서비스를 제공한다.
  • 사회 현상에 대한 (사회현상에 대한 분석) -> 문제를 확인, 해결하고 (문제해결능력) -> 이윤을 창출 (기업정신)
  • 많은 기업들은 선한 영향력에 관심이 많다 -> 거기에 대한 이미지도 만든다.
  • (브런치) 작가에 대한 동기부여 -> 직원 스스로 동기부여

이 시대에서 살아남기 위해 필요한 것은 무엇일까?

변화될 언택트 사회

욕구의 본질

20 07 04 내 다음 찾기 워크숍 (1): 욕구의 본질

결론

결국 내 생각이 가장 중요하다. 현상이 주어졌을 때, 의심하고 자신의 생각을 가져야 한다.

다양한 경험을 많이 해서 나의 경계선을 만들자. 나만의 output을 만들어야한다.