전체 글 (62) 썸네일형 리스트형 프로그래머스 - 불량 사용자 (C++) 맨날 적당히 머리굴리다가 구글링을 해버리는 제 자신이 프로그래머스 불량 사용자가 아닐까 싶습니다. 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr일단 이 문제는 데이터의 크기가 작습니다. user_id는 최대 8이고 banned_id도 최대 8, 아이디의 길이도 8입니다. 따라서 시간초과에 비교적 부담없이 풀이를 구상해도 좋습니다. 저같은 경우에는 가벼운 마음으로 next_permutation()을 사용할 수 있었습니다(참고로 데이터가 N개일때 next_permutation의 시간복잡도는 O(N*N!)입니다).문제 해결에서 고려할 요소는 아래와 같습니다.1. 하나의 banned_id에 하나의 user_i.. C++을 공부해야 할까? 새벽에 C++을 공부하다가 문득 생각이 들었습니다. C++을 공부하는게 맞을까? 언어의 완성도나 여러 분야에서 아직도 널리 사용되는 C++이라는 언어 자체에 대한 의구심을 갖고 이런 의문을 갖는건 아닙니다. 어디까지나 개인적인 상황에 대한 주관적인 고민입니다.게임쪽에서 C++은 아직 많이 사용되긴 합니다. 언리얼에서는 당연히 사용되고, 게임 서버로 C++를 기반으로 만든 게임도 아직 많죠.주력 언어가 C++이 아닌 게임 개발자(ex. Unity를 주로 사용하는 게임개발자)가 C++를 공부하고자 하는 이유로는서버나 언리얼같은 다른 포지션에 대한 전향을 희망(또는 대비)하거나로우 레벨 언어를 공부하는것으로 얻을수 있는 CS적 지식을 얻고자Unity도 내부적으로는 C++로 구현되있으니, Unity를 조금 더 .. 네이글 알고리즘(Nagle's Algorithm)에 대해서 네이글 알고리즘이란? 네이글 알고리즘(Nagle's Algorithm)은 네트워크 통신에서 효율성을 높이기 위해 고안된 기술입니다. 이 알고리즘은 TCP(Transmission Control Protocol)에서 작은 데이터 패킷 전송으로 인한 네트워크 혼잡을 줄이는 것을 목표로 합니다. 네이글 알고리즘의 작동 원리 네이글 알고리즘의 핵심은 "작은 데이터 패킷을 모아 전송하는 것"입니다. 구체적으로는 다음과 같이 작동합니다: 전송 중인 패킷이 없.. [C++]Linux - 스레드 동기화와 뮤텍스(Mutex) 멀티스레드를 이용하는 프로그램에서 여러개의 스레드가 공유 데이터에 접근하게 되면, 접근 시점에 따라 여러 문제가 발생할 수 있습니다.이런 문제를 해결하기 위한 일련의 작업들을 스레드 동기화(Thread Synchronization)이라고 합니다.스레드 동기화가 필요한 상황은 크게 2가지로 정리가 가능합니다.1. 둘 이상의 스레드가 공유 자원에 접근할때2. 스레드간 통신이 필요할 때(ex. 한 스레드가 작업을 완료한 후, 기다리는 다른 스레드에 알리는 경우) 아래는 리눅스에서 사용할 수 있는 여러 스레드 동기화 기법들입니다.기법설명특징주 사용 예뮤텍스 (Mutex)단일 스레드만 임계 구역에 접근 보장- 코드 간단, 직관적- 임계 구역 보호- 데드락 주의파일 읽기/쓰기, 공유 메모리 보호조건 변수특정 조건 .. Nullable 연산자(?.)와 Null 병합 연산자(??) 공부할때는 어디에 쓸까 하다가도 은근히 유용한 null 관련 연산자들입니다.Nullable (?.)객체가 null인지 확인하며, null이 아닌 경우에만 해당 멤버에 접근합니다. 객체가 null이라면 예외를 발생시키지 않고 null을 반환해줍니다. 사용 문법은 아래와 같이 . 앞에 ?를 붙여서 사용하면 됩니다.object?.Member 예제class Person{ public string Name { get; set; } public int? Age { get; set; } // Nullable}Person person = null;// Nullable 연산자 사용Console.WriteLine(person?.Name); // 출력: (null)이러한 경우에서 person이 null일때 예외가.. 널(null) 포인터 nullptr에 대해 nullptr은 C++부터 도입된 명시적 null 포인터 상수이며, 포인터가 어떤 객체도 가리키지 않는 것을 나타냅니다.포인터를 초기화하거나 null 포인터를 표현하는데 사용합니다. 모든 포인터 타입에서 사용할 수 있습니다.다만, 아래처럼 포인터가 아닌 값을 초기화할때는 사용할 수 없습니다.int x = nullptr; //오류 발생. nullptr은 포인터로만 사용 가능함 장점NULL은 0으로 정의되어 있기 때문에, 숫자와 포인터를 혼동할 가능성이 존재했지만, nullptr은 명확히 포인터로만 사용되기 때문에, 정수와의 혼동을 방지합니다.void func(int);void func(int*);func(NULL); // 불명확: 정수 0 또는 포인터 NULL로 해석될 수 있음func(nullptr);.. const, constexpr, consteval에 대해 const변경 불가능한 값을 표시할때 사용합니다. 인터페이스를 명시할 때 주로 사용되며, const의 값은 런타임 또는 컴파일 타임에 계산될 수 있습니다. constexpr컴파일 타임에 평가되는 컴파일 타임 상수를 정의할 때 사용됩니다.상수를 명시하거나, 읽기 전용 메모리 내에 데이터를 넣을때 사용됩니다.constexpr의 값은 컴파일러가 계산해야 합니다. constexpr로 정의된 함수는 컴파일 타임 상수를 생성할때 사용할 수 있지만, 일반 함수처럼 사용도 가능합니다. 아래는 예시입니다.#include constexpr int square(int x) { return x * x;}int main() { constexpr int compileTimeValue = square(5); // 컴파일.. C++의 구조체 멤버 맞춤(Structure member alignment), 클래스 C++에서 구조체의 멤버 맞춤(alignment)은 메모리 효율성과 접근 속도를 최적화하기 위해 구조체 내 멤버들이 메모리에 배치되는 방식을 말합니다.이는 CPU가 메모리를 효율적으로 접근하기 위해 특정 크기 단위로 데이터를 배치하는 것을 요구하기 때문입니다. 기본 원칙은 구조체의 멤버 중 가장 큰 자료형의 정렬 크기(alignment requirement)에 맞춰 배치된다는 것인데, 이를 통해 CPU가 메모리 접근 시 잘못된 정렬(unaligned access)로 인해 발생하는 성능 저하를 방지합니다. 기본 규칙 • 멤버 변수는 자신의 크기 또는 구조체의 정렬 크기 중 작은 값에 맞춰 배치됩니다. • 구조체의 크기는 전체 구조체의 정렬 크기의 배수가 됩니다. 패딩(padding)멤버 변수 사이에 삽입되.. 이전 1 2 3 4 5 ··· 8 다음