본문 바로가기

코딩 및 기타/어서와! 자료구조와 알고리즘

5일차

728x90

주요 모던 C++ 문법

∙ 타입 추론 auto 키워드

- 변수 선언 시 타입 자리에 auto 키워드를 지정하면 컴파일 시간에 자동으로 타입을 추론하여 결정

- 복잡한 타입 또는 범용적인 코드 작성 시 유리

- const 또는 레퍼런스(&) 속성을 사용해 auto를 한정할 수 있음

auto a1 = 10; //int
auto a2 = 3.14; //float
auto a3 = "hello"; //const char*
auto a4 = "hello"s; //std::string

 

∙ 타입 정의 (using)

- C언어 또는 C++11 이전이라면 typedef를 사용하고, C++ 이후라면 using 사용을 권장

- using 문법이 읽기 더 쉽고, 템플릿 별칭도 지원함

 

∙ 범위 기반 for문

- 배열 또는 STL 컨테이너에 들어있는 모든 원소를 순차적으로 접근하는 C++11의 새로운 반복문

- 사용자 정의 타입에 대해 범위 기반 for문을 지원하려면 std::begin(), std::end() 함수를 지원해야 함

vector<int> numbers {10, 20, 30}

for (int n : numbers){
	cout << n << endl;
}

 

∙ chrono 라이브러리

- OS 독립적으로 정밀한 시간 측정 가능, 나노초 단위까지 측정 가능

- 특정 연산 전후로 time_point를 측정하고, time_point 차이를 이용하여 실제 연산 시간을 계산

> 전체 타입을 모두 명시하여 코드를 작성하면 복잡하므로 auto사용 예제 코드를 참고

- 프로그램 동작 시간을 제대로 측정하려면 g++ 사용 시에는 -O2 옵션을 사용하고, Visual Studio 사용 시에는 Release 모드로 빌드해야 함

- <chrono>에 정의되어 있음

auto start = chrono::system_clock::now();

......

auto end = chrono::system_clock::now();
auto msec = chrono::duration<double>(end - start).count() * 1000;
cout << "time : " << msec << "ms" << endl;

 

 

∙ 프로그래머스 실습 (분수 사칙연산)

#include <string>
#include <vector>

using namespace std;

// 최대공약수 계산 함수
int gcd(int a, int b) {
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

vector<int> solution(int numer1, int denom1, int numer2, int denom2) {
    int denom = denom1 * denom2;
    int number = numer1 * denom2 + numer2 * denom1;
    
    // 분자와 분모의 최대공약수 계산
    int divisor = gcd(number, denom);
    
    // 분자와 분모를 최대공약수로 나누어주기
    number /= divisor;
    denom /= divisor;
    
    vector<int> answer{number, denom};
    return answer;
}

 

'코딩 및 기타 > 어서와! 자료구조와 알고리즘' 카테고리의 다른 글

7일차  (0) 2023.08.12
6일차  (0) 2023.08.10
4일차  (0) 2023.08.08
3일차  (0) 2023.08.07
2일차  (0) 2023.08.04