분류 전체보기(65)
-
C++) 객체 지향 프로그래밍
프로그래밍 기법 절차 지향 프로그래밍 / C 가장 초기부터 사용된 기법 프로그램은 코드의 흐름(위에서부터 아래로 순서대로)에 따라 실행. 이러한 하향식 설계로 인해서 코드의 순서가 바뀌면 동일한 결과를 보장할 수 없다. 프로그램의 규모가 커질수록 비구조적인 구성 때문에 유지보수가 힘들어진다. 순차적인 코드의 실행 방법이 컴퓨터의 작업 처리 방법과 유사하여 실행 속도가 빠르다. 절차지향 프로그래밍에서 프로그램은 단순히 컴퓨터 명령어의 집합이다. 구조적 프로그래밍 절차지향 프로그래밍의 단점을 보완하기 위해 코드를 기능 단위로 묶었다.(함수) 절차지향 프로그래밍에 비해 유지보수가 수월하지만 여전히 하향식 설계라는 단점이 존재한다. 객체 지향 프로그래밍 / C++ 공통된 속성과 메서드들을 각각 독립된 '객체'라..
2023.12.13 -
풍선 터트리기(선형 탐색)
https://school.programmers.co.kr/learn/courses/30/lessons/68646 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 인접한 두 풍선 중 하나를 터트릴때 작은 풍선을 터트리는 행위는 단 한 번만 할 수 있음에 유의하여야 한다. 풍선들의 값들은 모두 다르다고 하였으므로 풍선 중에는 최솟값인 풍선이 존재할 것이고 해당 풍선은 무조건 모든 풍선을 터트릴 수 있을 것이다. 그리고 다른 풍선의 관점으로는 최솟값인 풍선과 만났을때 작은 풍선을 터트려야 하므로 최솟값인 풍선을 만나기 전에는 큰 풍선만 터트리는 행위만 하여야 ..
2023.09.18 -
입국심사(이분 탐색)
https://school.programmers.co.kr/learn/courses/30/lessons/43238 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이번 이분탐색 문제도 헤매다가 결국 힌트를 보고 깨달았는데... 심사 받는 사람의 수를 탐색하는 것이 아닌 소요되는 시간을 이분탐색으로 최대한 줄여나가면 된다. 이전에 풀었던 공유기 설치 문제와 동일한 방법이다. https://djgameprogramming.tistory.com/117 공유기 설치(이분 탐색, 그리디) https://www.acmicpc.net/problem/2110 2110번:..
2023.09.06 -
경주로 건설(DP)
https://school.programmers.co.kr/learn/courses/30/lessons/67259 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해당 문제에서 고려해야 하는 점은 x, y 좌표뿐 아니라 해당 좌표에서 들어오게 된 경로, 즉 방향까지 고려야하여야 한다. 특정 좌표에서 특정 방향으로 접근했을때의 도로의 최소 건설 비용을 저장하는 방법의 DP 접근을 사용한다. DP[x][y][direction] = x, y좌표의 지점에서 direction 방향으로 접근했을때 건설한 도로의 최소 비용 만약 현재 노드에서 동쪽으로 다음 노드에 접근..
2023.09.05 -
숫자 게임(BST)
https://school.programmers.co.kr/learn/courses/30/lessons/12987 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 상대의 숫자를 선형탐색하면서 상대의 숫자보다 크면서 최소인 값을 구하면 된다. 없다면 갖고있는 숫자 중 최소값을 사용한다. A의 숫자마다 B의 모든 숫자를 탐색한다면 N^2의 시간이 소요되므로 이진탐색트리를 사용하도록 한다. 이진 탐색의 lower bound, upper bound의 활용을 보는 문제라고 생각된다. set.lower_bound(): 특정 값 이상의 값이 처음 나타나는 위치를 반환한..
2023.08.18 -
타일링(DP)
https://school.programmers.co.kr/learn/courses/30/lessons/12900 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr DP 문제인만큼 이전의 상황들을 사용하여 새로운 상황을 풀어나간다. 길이가 N인 직사각형을 채우는 방법은 다음과 같이 나눌 수 있다. 1. 길이가 N-1인 직사각형을 채우는 방법에서 가장 오른쪽에 세로 타일 1개를 추가한다. 2. 길이가 N-2인 직사각형을 채우는 방법에서 가장 오른쪽에 가로 타일 2개를 추가한다. 길이가 N-2인 직사각형에서 세로 타일을 2개 추가하는 경우는 이미 1번에서 모두 ..
2023.08.16 -
수식 최대화(순열, 완전 탐색)
https://school.programmers.co.kr/learn/courses/30/lessons/67257 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 각 연산들의 우선순위를 정할때 순열의 개념을 사용한다. 연산자가 3개뿐이라 순열의 경우의 수는 3! = 6가지 뿐이지만 next_permutation 연습을 위해서 굳이 사용해보았다. 숫자와 연산자를 각각 다른 벡터에 담아두도록 한다. 순열(우선순위)에 따라 연산자 벡터를 선형 탐색하면서 높은 우선순위의 연산자 먼저 처리해주면 되는데 i번째 연산자는 i번째 숫자와 i+1번째 숫자의 연산이라는 점만..
2023.08.08 -
광물 캐기(그리디)
https://school.programmers.co.kr/learn/courses/30/lessons/172927 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 어떤 기준으로 그리디 하게 접근해야 하는지 고민해 봐야 하는 문제다. 모든 광물에 대해서 다이아, 철, 돌 곡괭이 순서로 피로도 소모가 적다. → 그리디 다이아, 철, 돌 곡괭이중 모든 광물에 대해 다른 값을 갖고있는 것은 돌 곡괭이 뿐이다. → 기준 즉, 각 광물에 대해서 돌 곡괭이로 캤을때의 피로도를 구하고 돌 곡괭이로 캤을때 가장 피로도가 높은 광물들 먼저 다이아->철->돌 곡괭이 순서로 ..
2023.08.04 -
의상(해시, 조합 접근법)
https://school.programmers.co.kr/learn/courses/30/lessons/42578 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 내용이나 난이도는 평이하지만 접근 방법을 기억할만하다고 생각해서 포스트를 작성했다. 여기서 생각해야하는 점은 모든 종류의 의상을 입지 않아도 되는 것이다. 상의와 바지가 있을때 상의만 입어도(...) 옷을 제대로 입었다고 카운트해준다. 옷을 한 종류만 입을 때, 두 종류만 입을 때, 세 종류만 입을 때.... 입을 옷의 종류를 조합하여 계산해나가야 할까? 이렇게 접근한다면 머리가 지끈거리겠지..
2023.07.21 -
Reflection, Garbage Collection
Refection 프로그램이 런타임에 자기 자신을 조사하는 기능 기본 C++는 리플렉션을 지원하지 않음 언리얼엔진은 자체적으로 C++ 클래스, 구조체, 함수, 멤버 변수, 열거형 정보를 수집하는 별도의 리플렉션 시스템이 구축되어있음. 프로퍼티 시스템이라고 함. 어떠한 클래스, 구조체, 함수, 변수, 열거형 정보를 리플렉션에 추가하려면 특수한 주석(매크로)를 달아줘야함. 이러한 주석이 달린 정보들은 UHT(Unreal Header Tool)가 프로젝트를 컴파일 할 때 해당 정보를 수집함. https://www.unrealengine.com/ko/blog/unreal-property-system-reflection 언리얼 프로퍼티 시스템 (리플렉션) 리플렉션(Reflection)은 프로그램이 실행시간에 자기..
2023.06.05 -
데이터베이스
데이터베이스는 조직의 운영에 필요한 데이터들을 여러 사용자들이 공유하고 접근할 수 있도록 만든 데이터의 집합이다. 데이터를 조직적으로 통합하여 중복을 최소화하고 데이터들을 구조화하여 저장한다. 통합 데이터(Intergrated Data) 데이터 베이스는 여러 개의 연관된 데이터를 하나로 통합하여 저장, 관리한다. 이러한 방법으로 데이터의 중복을 최소화하고 일관성을 유지시킨다. 저장 데이터(Stored Data) 데이터베이스는 디스크, 메모리같은 컴퓨터가 접근할 수 있는 저장 매체에 데이터를 저장한다. 운영 데이터(Operational Data) 데이터베이스는 조직의 운영에 필요한 데이터를 포함한다. 공용 데이터(Shared Data) 데이터베이스는 여러 사용자 또는 응용 프로그램이 동시에 데이터에 접근하..
2023.05.30 -
해시 테이블, 해시 함수
해시 테이블 데이터를 Key, Value 조합으로 관리하는 비선형적 자료구조. 해시 함수를 사용하여 각 Key를 해시 값으로 변환하고, 해시 값을 인덱스로 사용하여 해시 테이블에 저장한다. 데이터가 저장되는 공간을 버킷(bucket)이라고 한다. 삽입/삭제/탐색 모두 상수 시간(O(1))으로 처리가 가능하다. 단, 서로 다른 Key가 같은 해시 값을 도출해내는 해시 충돌이 일어날 경우 탐색 시간이 증가할 수 있다. 해시 함수 임의의 길이를 가진 데이터를 고정된 길이의 해시 값으로 변환(매핑)해주는 함수. 동일한 입력에 대해 항상 동일한 해시 값을 반환해야 한다. 대부분 해시 함수는 출력 범위가 입력 범위 보다 작으므로 다른 입력에 대해 동일한 해시 값을 반환하는 해시 충돌이 발생할 수 있다(비둘기집 원리..
2023.05.25