쿨러 때문에 카메라 못 달 줄 알았는데 가능하네요.. 

역시

 

하면 된다.

 

1. 브라켓을 연다
: 위로 들면 들린다.

 

2. 틈 사이에 꽂는다.
방향은 파란색 라인이 USB 포트로 향하도록 or 카메라 렌즈가 위를 보도록

 

3. 검정색 브라켓을 닫는다.
끝까지 닫는다.

 

성공!!

 

 

고마운 도구들 (근처 마트에서 산 드라이버 & 마스카라 사고 받은 속눈썹용?-한 번도 안 써본 핀셋)
# 핀셋으로 브라켓 열고, 끼움
# 드라이버로 왼쪽(안쪽) 브라켓 부분을 누름
# 오른쪽 브라켓은 손으로 가능함

 

결국 끼웠습니다.... 반드시 끼우겠다는 의지... 긍정적으로(?) 살아야 하나봐요! 화이팅~

문제

 

해결

 

1. 시스템 환경 변수 편집

 

2. 시스템 속성 > 환경 변수 클릭 

 

3. 환경 변수 > 시스템 변수 에서 Path 편집

 

4. Anaconda Prompt에서 'where conda' 검색

 

5. 경로 추가하기

 

6. 컴퓨터 껐다 켜기

'Python' 카테고리의 다른 글

CodeUp 기초 100제 / Python [기초 - 출력]  (0) 2023.07.06

1. 문자열 해시 함수: unordered_map<string, int, '문자열 해시 함수'> poketmon_dogam;

  • 균일한 해시 분포
  • 해시 충돌을 줄여 unordered_map 성능 향상
  • 충돌 적음 ->  버킷 체인 길이 줄어듦 -> 메모리 사용량 감소
문자열 해시 함수
: unordered_map의 세 번째 템플릿 인자로 사용자 정의 해시 함수를 지정할 때
보통 함수 객체(functor)를 정의하는 구조체(struct)를 사용
*** operator()를 오버로딩해서 해시 함수의 동작을 정의
따라서, 커스텀 해시 함수를 정의하면 기본 해시 함수 대신 사용 가
# DJB2
struct StringHash {
    size_t operator()(const string& s) const {
        size_t hash = 5381;
        for (char c : s)
            hash = ((hash << 5) + hash) + c;
        return hash;
    }
};

// 사용 예:
unordered_map<string, int, StringHash> my_map;
-------------------------------------------------------------------------------------------
# FNV-1a
struct FNV1a {
    size_t operator()(const std::string& s) const {
        size_t hash = 14695981039346656037ULL;
        for (char c : s) {
            hash ^= static_cast<size_t>(c);
            hash *= 1099511628211ULL;
        }
        return hash;
    }
};
// 사용 예:
unordered_map<string, int, FNV-1a> my_map;
-------------------------------------------------------------------------------------------
# Murmur2
struct MurmurHash2 {
    size_t operator()(const string& s) const {
        const unsigned int m = 0x5bd1e995;
        const int r = 24;
        unsigned int seed = 0;
        unsigned int len = s.length();
        const unsigned char* data = (const unsigned char*)s.c_str();

        unsigned int h = seed ^ len;

        while (len >= 4) {
            unsigned int k = *(unsigned int*)data;

            k *= m;
            k ^= k >> r;
            k *= m;

            h *= m;
            h ^= k;

            data += 4;
            len -= 4;
        }

        switch (len) {
        case 3:
            h ^= data[2] << 16;
        case 2:
            h ^= data[1] << 8;
        case 1:
            h ^= data[0];
            h *= m;
        };

        h ^= h >> 13;
        h *= m;
        h ^= h >> 15;

        return h;
    }
};
// 사용 예:
unordered_map<string, int, MurmurHash2> my_map;

2. unordered_map과 vector 조합:

  • unordered_map은 문자열을 키로, 정수를 값으로 저장합니다. 이는 문자열 검색에 O(1) 시간 복잡도를 제공합니다.
  • vector는 정수 인덱스로 문자열에 직접 접근할 수 있어, 정수 입력에 대해 O(1) 시간 복잡도로 검색할 수 있습니다.
  • 이 조합은 양방향 검색을 효율적으로 수행할 수 있게 합니다.

 

3. 메모리 효율성:

  • vector는 연속된 메모리 공간을 사용하기 때문에 캐시 효율성이 좋음
  • unordered_map은 해시 테이블을 사용하여 빠른 검색을 제공하며, 커스텀 해시 함수로 메모리 사용을 최적화 가능

unordered_map template
template <class Key,    // 키 형식 : key_tyep
        class Ty,	// 매핑된 형식 : mapped_type
        class Hash = std::hash<Key>,	// 해시 함수 개체 형식 : hasher
        class Pred = std::equal_to<Key>,// 같음 비교 함수 개체 형식 : key_equal
        class Alloc = std::allocator<std::pair<const Key, Ty>>>	// 할당자 클래스 : allocator_type
class unordered_map;

 

 

 

[ getline 함수 동작 ]
1. 개행문자('\n')를 만날 때까지 입력 스트림에서 문자들을 읽는다.
2. 개행문자를 읽지만, 이를 결과 문자열에 저장하지 않는다.
3. 개행문자는 입력 스트림에서 제거된다. (즉, 버퍼에 남지 않음).
4. 결과 문자열에는 개행문자 직전까지의 문자들만 저장된다.

*** cin 은 공백을 무시하지만 버퍼에 남기기 때문에
int num;
cin >> num;
와 같이 getline 사용하기 전에 cin을 썼다면
cin.ignore(), cin.get() 와 같은 함수를 사용하면 된다.
*** 모든 입력을  'getline()' 으로 받고
필요시 형변환하는 것도 하나의 방법이다.
string input;
getline(cin, input);
num = stoi(input);  // string to int
getline(cin, str);

# getline 함수 모음

 

std::getline (C++ 표준 라이브러리) :
string 객체 사용
*** 공백 포함 가능 / 기본적으로 개행 문자('\n')까지 읽음 / 지정 구분자 읽기 가능
#include <string>
istream& getline (istream& is, string& str, char delim);
istream& getline (istream& is, string& str);
---------------------------------------------------------
#include <iostream>
#include <string>
using namespace std;

int main() {
    string line;
    cout << "Enter a line of text: ";
    getline(cin, line);
    cout << "You entered: " << line << endl;
    return 0;
}
---------------------------------------------------------
string line;
getline(cin, line); // 개행 문자까지 공백 포함하여 읽음
getline(cin, line, ','); // 쉼표까지 공백 포함하여 읽음

 

std::cin.getline (C++ 표준 입력 스트림) :
char 배열 사용
*** 공백 포함 가능, 기본적으로 개행 문자('\n')까지 읽을 수 있음
#include <iostream>
istream& getline (char* s, streamsize n);
istream& getline (char* s, streamsize n, char delim);
------------------------------------------------------
#include <iostream>
using namespace std;

int main() {
    char name[50];
    cout << "Enter your name: ";
    cin.getline(name, 50);
    cout << "Hello, " << name << "!" << endl;
    return 0;
}
------------------------------------------------------
char name[50];
cin.getline(name, 50); // 개행 문자까지 공백 포함하여 읽음
cin.getline(name, 50, ','); // 쉼표까지 공백 포함하여 읽음

 

ifstream::getline (파일 입력 스트림) :
파일에서 한 줄씩 읽을 때 사용
*** 공백 포함 가능, 기본적으로 개행 문자('\n')까지 읽음, 지정 구분자 읽기 가능
#include <fstream>
ifstream& getline (char* s, streamsize n);
ifstream& getline (char* s, streamsize n, char delim);
-------------------------------------------------------
#include <fstream>
#include <iostream>
using namespace std;

int main() {
    ifstream file("example.txt");
    char buffer[100];
    
    if (file.is_open()) {
        while (file.getline(buffer, 100)) {
            cout << buffer << endl;
        }
        file.close();
    }
    return 0;
}
-------------------------------------------------------
ifstream file("example.txt");
char buffer[100];
file.getline(buffer, 100); // 개행 문자까지 공백 포함하여 읽음

 

stringstream::getline (문자열 스트림) :
문자열을 특정 구분자로 나눌 때 사용
#include <sstream>
stringstream& getline (string& str, char delim);
stringstream& getline (string& str);
--------------------------------------------------
#include <sstream>
#include <string>
#include <iostream>

using namespace std;

int main() {
    string input = "apple,banana,cherry";
    stringstream ss(input);
    string item;

    while(getline(ss, item, ',')) {
        cout << item << endl;
    }

    return 0;
}

'C&C++' 카테고리의 다른 글

C / C++ > NaN  (0) 2024.03.11
Hackerrank > C++ > Classes > Box it!  (0) 2024.03.08
  1. @ModelAttribute:
    • 주로 POST 요청에서 사용됨
    • client가 보낸 form 데이터를 객체로 바인딩할 때 사용
    • ex) 사용자가 입력한 게시글 정보를 BoardDTO 객체로 변환하여 처리
      - 요약 :  POST 요청에서 @ModelAttribute를 사용하여 데이터를 객체로 바인딩
  2. @PathVariable:
    • 주로 GET 요청에서 사용됨
    • URL 경로에서 변수를 추출할 때 사용
    • ex) 특정 게시글을 삭제 or 조회할 때 URL에 포함된 ID 값 가져오기

      - 요약 : GET 요청에서 @PathVariable을 사용하여 URL에서 변수를 추출
CREATE USER '유저이름'@'localhost' IDENTIFIED BY '비밀번호';
-> 실행 중인 컴퓨터에서만 접속, 로컬에서 작업

'DB > MySQL' 카테고리의 다른 글

명령어  (0) 2024.10.12

 

데이터베이스 관련 명령어
MySQL 클라이언트에 접속  : mysql -u 'username' -p
데이터베이스 목록 조회  : SHOW DATABASES; // MySQL 서버에 존재하는 모든 데이터베이스의 목록을 보여줌
데이터베이스 삭제 : CREATE DATABASE db_name;
데이터베이스 선택 : USE db_name;

 

테이블 관련 명령어
테이블 목록 조회 : SHOW TABLES;
테이블 생성 : CREATE TABLE table_name ( column1 datatype, column2 datatype, ... );
테이블 삭제 : DROP TABLE table_name;
테이블 구조 조회 : DESCRIBE table_name;

 

데이터 조작 명령어
데이터 삽입 : INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
데이터 조회 : SELECT * FROM table_name; SELECT column1, column2 FROM table_name WHERE condition;
데이터 수정 : UPDATE table_name SET column1 = value1 WHERE condition;
데이터 삭제 : DELETE FROM table_name WHERE condition;

 

기타 명령어
현재 선택된 데이터베이스 확인 : SELECT DATABASE();
현재 사용자 확인 : SELECT USER();
세션 종료 : EXIT;
쿼리 기록 확인 : SHOW PROCESSLIST;
명령어 기록 지우기 : FLUSH HOSTS;

'DB > MySQL' 카테고리의 다른 글

mysql 사용자 생성  (2) 2024.10.12
처음으로 작성한 코드
Time: 23 ms (61.21%), Space: 22.9 MB (87.58%)
class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>> answer;

        sort(intervals.begin(), intervals.end());
        int left = intervals[0][0], right = intervals[0][1];
        answer.push_back(intervals[0]);
        for (int i = 1; i < intervals.size(); i++) {
            // intervals[i][0]이 right보다 크면 answer.push_back(intervals[i]) 하고, left&right 초기화
            // intervals[i][0]이 right보다 작거나 같으면 넘어가기 (아래로)
            // intervals[i][1]이 right보다 크면 right = intervals[i][1], answer 마지막 원소 right 값 갱신
            if (right < intervals[i][0]) {
                answer.push_back(intervals[i]);
                left = intervals[i][0];
                right = intervals[i][1];
            }

            right = max(right, intervals[i][1]);
            answer.back()[1] = right;
        }

        return answer;
    }
};

 

두 번째 코드
Time: 15 ms (96.72%), Space: 23 MB (37.6%)
class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>> answer;
        sort(intervals.begin(), intervals.end());
        int size = intervals.size();
        for (int i = 0; i < size; i++) {
            if (answer.empty() || answer.back()[1] < intervals[i][0]) {
                answer.push_back(intervals[i]);
            }
            else {
                answer.back()[1] = max(answer.back()[1], intervals[i][1]);
            }
        }

        return answer;
    }
};

 

(1) Time: 15 ms (96.72%), Space: 23 MB (37.6%)

int size = intervals.size();
for (int i = 0; i < size; i++) { }

(2) Time: 30 ms (19.53%), Space: 23 MB (72.73%)

for (int i = 0; i < intervals.size(); i++) { }

=> 생각보다 많이 남 ㅜㅜ

 

스코프(scope) : 변수가 유효한 범위
- 변수의 스코프(scope)는 해당 변수가 선언된 블록에서 유효하다. (블록은 중괄호({ })로 표시됨)

 

문제가 된 코드 : switch문 내에서 변수 itr을 정의함
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <set>
#include <map>
#include <algorithm>
using namespace std;

int main() {
    enum {ADD = 1, ERASE, PRINT};
    map<string, int> student;
    int n, order, score;
    string name;

    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> order >> name;
        
        switch(order) {
            case ADD:
                cin >> score;
                auto itr = student.find(name);	// error
                if (itr != student.end())
                    itr->second += score;
                else
                    student.insert(make_pair(name, score));
                break;
            case ERASE:
                student.erase(name);
                break;
            case PRINT:
                auto itr = student.find(name);	// error
                if (itr != student.end())
                    cout << itr->second << '\n';
                else
                    cout << "0\n";
                break;
        }
    }
    return 0;
}

 

※ C++의 스코프 규칙을 어김 (잘못된 접근)

** 컴파일러가 오류를 발생한 이유 **
: scope 규칙에 따라 한 블록 안에서 선언한 변수는 그 블록 범위 안에서 살아있어야 하는데 switch의 어떤 case안에서 변수를 선언하면 그 케이스 레이블에서만 살아있게 되니까 switch는 전체가 한 블록인데 스코프 규칙을 어겨서 컴파일러가 에러 띄운 것

 

수정한 코드
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <set>
#include <map>
#include <algorithm>
using namespace std;

int main() {
    enum {ADD = 1, ERASE, PRINT};
    map<string, int> student;
    int n, order, score;
    string name;

    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> order >> name;
        auto itr = student.find(name);	// 선언을 switch문 밖에서 함
        
        switch (order) {
            case ADD:
                cin >> score;
                if (itr != student.end())
                    itr->second += score;
                else
                    student.insert(make_pair(name, score));
                break;
            case ERASE:
                student.erase(name);
                break;
            case PRINT:
                if (itr != student.end())
                    cout << itr->second << '\n';
                else
                    cout << "0\n";
                break;
        }
    }
    return 0;
}

C++ > Control Structure
:
Sequence Structure, Selection Structure, Loop Structure
1. Sequence Structure(순차 구조) : linear-instruction
- 조건문(conditional statements), 반복문(loop)이 없고, 코드가 순차적으로 실행되는 구조

2. Selection Structure(선택 구조) : if-else문, switch문
- 특정 조건이 충족되었을 때, 프로그램의 흐름을 특정 코드 블록으로 전환하는 것

▶ if-else와 switch 문의 차이점
둘 다 선택 문이며 특정 조건이 충족될 때 프로그램 흐름을 특정 문 블록으로 전송하는 데 사용하지만,
a) if-else문 : equality와 logical expression 모두 검사 가능
- integers, floating-point values, characters, booleans, etc.

b) switch문 : equality만 검사
- integer or character 데이터 타입

3. Loop Structure(반복 구조) : while문, do-while문, for문

(출처) https://www.scaler.com/topics/control-structure-in-cpp/
1. Layer 분리(bit mask)
2. 원하는 대상만 Raycasting 하도록 최적화
* Raycasting은 부하를 많이 주는 작업이기 때문에 연산 과부화 줄이는 것이 필요

 

'Unity' 카테고리의 다른 글

Letter using Dialogue System  (0) 2023.04.04

+ Recent posts