[prgorammers] Level0

[prgorammers] Level0

2023년 6월 21일

set 활용 #

https://school.programmers.co.kr/learn/courses/30/lessons/181930

1set<int> s{a, b, c};
2if(s.size() == 3)
3    return a + b + c;
4if(s.size() == 2)
5    return (a + b + c) * (pow(a, 2) + pow(b, 2) + pow(c, 2));
6if(s.size() == 1)
7    return (a + b + c) * (pow(a, 2) + pow(b, 2) + pow(c,2)) * (pow(a, 3) + pow(b, 3) + pow(c, 3));

define 활용 #

1#include <bits/stdc++.h>
2#define all(x) (x).begin(), (x).end()
3using namespace std;
4
5int solution(vector<int> num_list) {
6    return accumulate(all(num_list), 1, multiplies<int>()) < pow(accumulate(all(num_list), 0), 2) ? 1 : 0;
7}

bool 인 경우 조건식을 논리연산자대신 bit연산자도 괜찮다 #

1bool solution(bool x1, bool x2, bool x3, bool x4) {
2    return (x1 | x2) & (x3 | x4);
3}

for_each #

1void func(int& n) {
2    if (n % 2 == 0 && n >= 50)
3        n = n / 2;
4    else if (n % 2 && n < 50)
5        n = n * 2;
6}
7
8for_each(arr.begin(), arr.end(), func);
  • stream의 map처럼 사용하기
1void func(char& c) {   // 참조로 인자를 받아서 원본 수정
2    if (c == 'A')
3        c = 'B';
4    else
5        c = 'A';
6}
  • 콜백함수에서 값 변경
1int i = 0;
2for_each(arr.begin(), arr.end(), [arr, i = 0, n](int& num) mutable {  // mutable 키워드로 i 수정가능
3    if (i % 2 != arr.size() % 2)
4        num += n;
5    i++;
6});

조건에 맞는 데이터 수 count_if #

1count_if(array.begin(), array.end(), [height](int n) {return n > height;});

문자열 일괄 대소문자 변환 #

 1transform(myString.begin(), myString.end(), myString.begin(), ::tolower);
 2transform(myString.begin(), myString.end(), myString.begin(), ::toupper);
 3
 4string alp = "test"
 5transform(my_string.begin(), my_string.end(), my_string.begin(),
 6    [alp](int c) {
 7        if (c == alp[0])
 8            return c - 'a' + 'A';
 9        return c;
10    });

sregex_token_iterator 로 구현한 split #

1vector<string> solution(string my_string) {
2    regex rx(" ");
3    sregex_token_iterator iter(my_string.begin(), my_string.end(), rx, -1), end;
4    return {iter, end};   // 리턴이 벡터라 uniformed 초기화
5}

regex_replace #

1#include <regex>
2string solution(string rny_string) {
3    string answer = "";
4    rny_string = regex_replace(rny_string,regex("m"),"rn");
5    answer= rny_string;
6    return answer;
7}

vector.insert 로 반복하기 #

1void insert (iterator position, size_type n, const value_type& val);

10진수의 2진수 자릿수 #

1ceil(log2(n)) + 1
2// log2(4) == 2
3// log2(3) == 1.58...
4// log2(2) == 1

2진법 <-> 10진법 #

1for (auto ch : bin1) a = a << 1 | ch - 48;   // 2진수 스트링 -> 10진수 정수
2for (int n = a + b; n; n >>= 1) ret = char(n % 2 + 48) + ret; // 10진수 정수 -> 2진수 스트링

bitset 을 이용한 int to bin #

1// ex) convert(50);
2int convert(int num) {
3    stringstream ss;
4    int ret;
5    // num을 32bit 2진수로 변경 
6    ss << bitset<32>(num);  // "00000000000000000000000000110010"
7    ss >> ret;              // int ret = 110010;
8    return ret;
9}

어떤 숫자의 정규화값 얻기 #

1(sum1 - sum2) / abs(sum1 - sum2);

정수 <-> 문자열 변경 #

1stoi(string);
2to_string(int);
3stringstream

문자열 밀기 #

A문자열을 오른쪽으로 몇번 밀어서 B를만들수있는가? 못만들면 -1

1int solution(string A, string B)
2{
3    B += B;
4    return B.find(A);
5}

구간(배열) 안에서 최소 최대값 구하기 #

https://en.cppreference.com/w/cpp/algorithm/max_element

1max_element(array.begin(), array.end());
2min_element(array.begin(), array.end());

iterator간 거리 구하기 #

1distance(array.begin(), array.end())

sort 커스텀 콜백 #

a, b 자리가 정상이라면 1, 다르다면 0 (자리바꿈)
그래서 오름차순으로 만들고싶으면 a < b 조건으로 만들면된다.

1sort(numlist.begin(), numlist.end(), [&n](int a, int b) {
2    if (abs(n - a) == abs(n - b))
3        return a > b;
4    else
5        return abs(n - a) < abs(n - b);
6});

컨테이너 한칸씩 밀기 #

1if(direction =="left")
2    rotate(numbers.begin(),numbers.begin()+1,numbers.end());

comb 재귀 #

n개중에 r개를 선택하는 경우의수

1int combi(int n, int r){
2    if(r == 0) return 1;
3    if(n == 1) return 1;
4    if(r >= n) return 1;
5    return combi(n-1, r) + combi(n-1, r-1);
6}

요소 지우기 (erase + remove) #

remove는 특정 요소를 지우고, 각 요소를 떙겨온 다음 end() 이터레이터를 반환한다. 이때는 실제로 지워지는게 아니라 그냥 지울 요소를 맨뒤로 땡겨두는것
erase는 새로운 문자열의 end() 이터레이터부터 기존 end() 이터레이터 까지 지워버린다.

1my_string.erase(
2    remove(my_string.begin(),my_string.end(), letter[0])
3    ,my_string.end()
4);

벡터 뒤집기 rbegin(), rend() #

1return {num_list.rbegin(), num_list.rend()};

comments powered by Disqus