Array - Basic

JeongChaeJin·2022년 11월 9일
0

Reference

Why Coding Test

  • Computational Thiking을 할 수 있는지를 보는 것이다.
  • 이는 Time, Space Complexity를 이해하고 있는지를 확인할 수 있고, 이러한 것이 가능한 개발자만이 Scalable한 개발을 할 수 있다고 판단하고 있다.

Array

  • random access가 가능한 연속적인 메모리 구조의 자료구조이다.
  • 보통 아래 문제들로 구성된다.

Sorting

  • O(nlogn)을 추구한다.
  • Stable, Unstable Sorting 형태로 C++ 같은 경우 라이브러리가 지원된다.
  • Stable : Sorting 전의 Order가 유지되는 것을 의미한다.
  • Unstable : 위와 반대인 Sorting 상태이다.
KeyValue=> Stable SortingKeyValue
a4d1
b3e1
c2f1
d1c2
e1b3
f1a4
  • 위 처럼 Stable은 d,e,f의 값이 같음에도 Sorting 전의 순서를 따른다.
    • Unstable은 Random으로 배치되는 것을 말한다.
#include <iostream>
#include <vector>
#include <algorithm>

struct Employee
{
    int age;
    char name;
};

bool operator<(const Employee &lhs, const Employee &rhs)
{
    return lhs.age < rhs.age;
};

int main()
{
    std::vector<Employee> v{
        {200, 'A'},
        {200, 'B'},
        {200, 'C'},
        {200, 'D'},
        {200, 'F'},
    };

    for (int i = 9; i < 30; i++)
        v.emplace_back(Employee{i, 'Z'});

    std::stable_sort(v.begin(), v.end());

    for (const Employee &e : v)
        std::cout << e.age << ", " << e.name << std::endl;
}
...
25, Z
26, Z
27, Z
28, Z
29, Z
200, A
200, B
200, C
200, D
200, F
  • Stable
...

for (int i = 9; i < 30; i++)
        v.emplace_back(Employee{i, 'Z'});

    std::sort(v.begin(), v.end());

    for (const Employee &e : v)
        std::cout << e.age << ", " << e.name << std::endl;
25, Z
26, Z
27, Z
28, Z
29, Z
200, F
200, D
200, C
200, B
200, A
  • Unstable
  • O(n)을 기본적으로 추구한다.
  • Sorting 되어있는 자료구조의 경우 Binary Search로 O(logn)을 추구한다.

2-d, N-d

  • 보통 그래프, 트리 형태로 주어지므로 배열과는 연관만 있다고 보면된다.
profile
OnePunchLotto

0개의 댓글