본문 바로가기
반응형
[PCCP] Lv2: 행렬의 곱셈(12949) 해설 문제- 문제 링크: 행렬의 곱셈 해설- 자료구조: - 시간복잡도:  (풀이과정)1) 2) 3) 4)  코드(C언어)  (C++) solution 1)- N: 행 혹은 열의 길이- r1는 arr1의 행의 수, c1는 arr1의 열의 수- r2는 arr2의 행의 수, c2는 arr2의 열의 수- 총 r1 * c1 * c2만큼 연산- 최종 시간 복잡도: O(N^3)더보기#include #include using namespace std;vector> solution(vector> arr1, vector> arr2) { // 최종 행렬 곱의 결과를 저장할 벡터 선언 vector> answer; // arr1과 arr2의 행렬 곱을 수행했을 때 최종 행렬의 크기만큼 공간 할당 answ.. 2024. 12. 23.
[PCCP] Lv1: 실패율(42889) 해설 문제- 문제 링크: 실패율 해설- 자료구조: - 시간복잡도:  (풀이과정)1) 2) 3) 4)  코드(C언어)solution 1)  solution 2) solution 3)  (C++)solution 1)- N: 스테이지 개수- M: stages의 길이- 각 스테이지의 인원을 기준으로 특정 스테이지에서 실패한 인원수와 각 스테이지에 도전한 적이 있는 인원수를 구하는 과정: O(N*M)- 이후 실패율을 구할 떄 시간 복잡도: O(N)- 이를 정렬할 때 시간 복잡도: O(NlogN)- 최종 시간 복잡도: O(N*M + NlogN)더보기#include #include using namespace std;// 문제에서 요구하는 조건대로 실패율을 정렬하는 함수bool compare(pari& a, pair& b.. 2024. 12. 23.
[PCCP] Lv1: 모의고사(42840) 해설 문제- 문제 링크: 모의고사 해설- 자료구조: - 시간복잡도:  (풀이과정)1) 수포자별 패턴 정의2) 수포자별 맞힌 문제 개수 기록3) 가장 많은 문제를 맞힌 수포자 기록 코드(C언어)  (C++) solution 1)- N: answers의 길이- 각 수포자들 패턴과 정답 비교: O(N)- scores 순회하며 가장 높은 점수 탐색하여 수포자 추가 연산: O(1)- 최종 시간 복잡도: O(N)더보기#include #include #include using namespace std;// 각 수포자 패턴 정의vector first = {1, 2, 3, 4, 5};vector second = {2, 1, 2, 3, 2, 4, 2, 5};vector third = {3, 3, 1, 1, 2, 2, 4, 4,.. 2024. 12. 23.
[PCCP] Lv1: 두 개 뽑아서 더하기(68644) 문제- 링크: 두 개 뽑아서 더하기(Lv1)- 문제더보기(문제설명)정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 반환하는 solution() 함수를 완성하세요. (제한사항) - numbers의 길이는 2이상 100이하입니다.- numbers의 모든 수는 0 이상 100이하입니다. (입출력 예시)numbersresult[2, 1, 3, 4, 1][2, 3, 4, 5, 6, 7][5, 0 ,2, 7][2, 5, 7, 9, 12] 해설- 자료구조: - 시간복잡도:  (풀이과정)1) 배열에서 두 수를 선택하는 모든 경우의 수를 구함2) 과정 1에서 구한 수를 새로운 배열에 저장하고 중복값을 제거3) .. 2024. 12. 17.
[PCCP] 알고리즘 - 시뮬레이션 1. 이론- 구현에 중점- 접근 방식    - 하나의 문제를 여러개로 분리    - 예외처리가 필요시 독립함수로 구현- 기본 구현    - 행렬연산: 덧셈, 뺄셈, 곱셈    - 전치행렬: arr[i][j] = arr[j][i]    - 좌표연산: 이차원 배열 && 오프셋값(dx, dy)    - 좌우대칭: arr[i][j] = arr[i][(N-1)-j]    - 반시계 90도 회전연산: arr[i][j] = arr[j][(N-1)-i]- 예제: 배열 회전, 행렬곱, 전치행렬, 달팽이수열 2. 언어별 문법  3.  추천 문제 - Lv 2: 이진 변환 반복하기(70129) / 이진 변환 반복하기(70129) 해설- Lv 2: 롤케이크 자르기(132265) / 롤케이크 자르기(132265) 해설- Lv 2.. 2024. 12. 15.
[PCCP] 알고리즘 - 그리디 1. 이론- Greedy:    - 지역 최적해를 구함. 전역 최적해 장담 불가.    - 해결과정에서 결정 순간마다 눈 앞에 보이는 최선의 선택을 하며 선택을 번복하지 않음- 그리디 알고리즘 최적해 보장 조건    - Optimal Substructure(최적 부분 구조): 부분해 과정이 최적해 과정과 일치    - Greedy Selection Property(그리디 선택 속성): 선택과정이 다른 과정에 영향을 주지 않음- Spanning Tree    1) 모든 정점이 간선으로 연결    2) 간선의 개수는 (정점의 개수 - 1)과 동일- Minimum Spanning Tree(최소신장트리)    1) 모든 정점이 간선으로 연결    2) 간선의 개수는 (정점의 개수 - 1)과 동일    3) 간선.. 2024. 12. 15.
[PCCP] 자료구조 - 집합 1. 이론- 집합(set): 순서와 중복이 없는 원소를 갖는 자료구조- 집합 종류: 유한집합, 무한집합, 공집합, 상호배타적 집합- 상호배타적 집합: 교집합이 없는 집합 관계- 상호배타적 집합 활용분야: 이미지 분할, 도로네트워크 교차로, 최소신장트리의 사이클 확인, 게임개발시 물체 충돌 문제, 클러스터링 방지- 집합의 연산: 합치기, 탐색- 집합 표현: 배열을 활용한 트리 사용. 배열의 인덱스는 자신, 배열값은 부모 노드를 의미. 루트노드는 인덱스와 값이 동일- 루트 노드의 개수는 집합의 개수- Union-Find 알고리즘: union(합치기), find(탐색).- find 연산: 특정 노드의 루트 노드가 무엇인지 탐색하는 방법. 특정 노드가 같은 집합인지 확인. 재귀로 구현+) find 연산 비용은 .. 2024. 12. 14.
[PCCP] 자료구조 - 해시 1. 이론- 해시(hash): 해시함수를 사용해서 변환한 값을 인덱스로 삼아 키와 값을 저장해서 빠른 데이터 탐색을 제공하는 자료구조- 해시 특징: 단방향 동작(키를 통한 값 탐색만 가능). 키가 값의 인덱스이므로 값을 찾기 위한 탐색과정이 없음. 값을 인덱스로 사용하려면 변환 과정이 필요- 해시테이블: 키와 값이 저장되어 있는 공간- 버킷: 해시테이블의 각 데이터- 해시 ADT:  (시간복잡도)- 임의 접근(탐색): O(1)- 삽입:- 삭제: (선택시 고려할 점)- 단방향 검색이지만 빠른 검색이 필요한 경우 (해시함수 구현시 고려사항)- 해시함수 변환값은 해시테이블의 크기보다 작아야함- 변환값의 충돌이 최대한 적어야함+) 충돌: 서로 다른 두 키에 값을 적용시 동일한 결과를 의미 (주요 해시함수)- 나.. 2024. 12. 14.
[PCCP] 자료구조 - 큐 1. 이론- 큐(queue): 먼저 들어간 데이터가 먼저 나오는 자료구조(FIFO: First In First Out)- 삽입 연산을 enqueue, 꺼내는 연산을 dequeue- 큐 ADT: push(삽입), pop(꺼내기), isFull(), isEmpty(), front(오래된 삽입 데이터), rear(최근 삽입 데이터), data(데이터 저장공간)- 큐 활용 분야: 작업 대기열, 로드밸런서, 이벤트 처리 (시간복잡도)- 임의 접근: - 삽입: - 삭제:  (선택시 고려할 점)-   2. 프로그램 언어별 문법- 큐 선언 및 초기화- 큐 접근: 맨 앞(front), 맨 뒤(rear)- 큐 제어: 삽입(push), 삭제(pop)   더보기#include /* 큐 생성 및 초기화 */std::queue .. 2024. 12. 14.
[PCCP] 자료구조 - 스택 1. 이론- 스택(stack): 먼저 입력한 데이터를 제일 나중에 꺼냄(FILO: First In Last Out)- 삽입 연산을 push, 꺼내는 연산을 pop- 스택 ADT: 삽입(push), 꺼내기/삭제(pop), isFull(), isEmpty(), top(최근 데이터 인덱스), data(데이터 저장공간) (시간복잡도)- - 삽입: O(1)- 삭제: O(1) (선택시 고려할 점)- 최근에 삽입한 데이터를 자주 사용하는 경우-  2. 프로그램 언어별 문법- 스택 선언 및 초기화- 스택 접근(top)- 스택 제어: 삽입(push), 삭제(pop)   더보기#include /* 스택 생성 및 초기화 */stack st;/* 삽입 */st.push(값); // 요소 삽입/* 삭제 */st.pop(); /.. 2024. 12. 14.
반응형