분류 전체보기

2023년 하반기가 마무리되고, 겨울방학도 끝났다. Prometheus 동아리에서 한 학기(6개월)동안 여럿 프로젝트를 해왔고, 기초스터디를 하면서 다양한 모델과 머신러닝 기법들을 배웠다. 기초스터디 팀에서는 "혼자 공부하는 머신러닝+딥러닝" 교재를 통해 다양한 머신러닝 기법과 딥러닝 기법들을 배웠고, 실제 코드를 통해 실습을 하였다. 기초스터디랍시고 다소 가볍게 여겼었는데.. 생각보다 어려운 부분도 많아서 배울 점도 많았다. 기억나지 않는 부분도 많고, 코드도 제대로 학습하지 않은 상태에서 기초스터디 강좌가 끝나서, 이 부분들을 다시 복습이라도 해야 양심에 찔리지 않을 것 같다. 여튼..! 중요한 부분은 기초스터디가 끝나고 시간이 남아, 간단한 토이프로젝트를 진행했다..! 프로젝트명은 "프로메테우스 닉..
1. What is MVC Pattern? 3가지 요소(Component)로 구성되는 패턴이다. Model View Controller 이는 소프트웨어 공학에서 사용되는 소프트웨어 디자인 패턴이다. MVC 패턴을 도입하면 도메인(Business logic)영역과 UI 영역이 분리되므로 서로 영향을 주지 않고 유지보수가 가능함. 2. Structure of MVC Pattern 2.1. Model 데이터(data)의 가공, 비즈니스 로직(Business Logic)을 담당하는 요소(Component)이다. 데이터베이스, 계산 로직 또는 다른 데이터 소스와의 상호 작용을 관리한다. 비즈니스 로직을 처리한 모델의 변경사항을 컨트롤러와 뷰에 전달한다. 모델(Model)은 다음과 같은 규칙을 가진다. 사용자가 편..
https://www.acmicpc.net/problem/2143 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net - 누적 합(Cumulative Sum) - 이분 탐색(Binary Search) 우선 두 배열의 크기가 모두 1000이기 때문에, O(N^2)의 이중for문을 통해 가능한 모든 부분배열의 합의 경우의 수를 Asumcase, Bsumcase에 저장하였다. 그 이후, O(logN)의 lower_bound, upper_bou..
https://www.acmicpc.net/problem/2467 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net - 투 포인터(Two Pointer) - 이분 탐색(Binary Search) 간단한 투 포인터 문제로 보인다. 과정은 이러하다. (1) 용액 배열의 양 끝을 초깃값으로 잡은 뒤, 서로 다가오면서(투포인터) 두 개의 합이 0에 가장 가까울 경우 저장해준다. (2) 두 개의 합이 0 보다 작을 경우, 조금 더 0보다 가까운..
https://www.acmicpc.net/problem/12015 12015번: 가장 긴 증가하는 부분 수열 2 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000) www.acmicpc.net - 이분 탐색(Binary Search) - 다이나믹 프로그래밍(Dynamic Programming) - 너무나도 중요한 문제이다. 가장 긴 증가하는 부분수열을 구하는 풀이법은 크게 두 가지가 있다. 첫 번째는 길이가 N인 수열을 돌면서, "현재의 숫자 앞에서 자신보다 작은 수이면서 가장 큰 부분수열을 가진 값 + 1" 을 구하는 시간복잡도 O(N^2)인 풀이법이 있다. 두 번째는 "현재의 숫자 ..
https://www.acmicpc.net/problem/1253 2110번: 공유기 설치 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가 www.acmicpc.net - 이분 탐색 (Binary Search) - 투 포인터 (Two Pointer) 투 포인터를 이용하여, 서로 다른 두 수를 지목했고, 이들의 합을 구했다. 시간복잡도의 경우, - N개의 숫자를 모두 순회해야 하므로 O(N) - 각각의 숫자들이 서로 다른 두 수의 합으로 구할 수 있는지를 구하는 것은 투 포인터로 구현했으므로 O(N) 따라서 O(..
https://www.acmicpc.net/problem/2110 1450번: 냅색문제 첫째 줄에 N과 C가 주어진다. N은 30보다 작거나 같은 자연수, C는 109보다 작거나 같은 음이 아닌 정수이다. 둘째 줄에 물건의 무게가 주어진다. 무게도 109보다 작거나 같은 자연수이다. www.acmicpc.net - 이분 탐색(Binary Search) 이 문제를 풀기 전에 파악해야 하는 점은, 문제의 조건(가장 인접한 두 공유기 사이의 최대 거리)을 구하는 데에 있어서, "첫 번째 공유기"는 무조건 포함한다는 것이다. 또한, 우리가 Focus해야 하는 부분은 "간격"이다. (공유기의 위치가 아니다.) 예제를 예로 들어 보자. [1, 2, 4, 8, 9] 에서, 공유기 2개만 사용한다고 가정했을 때, 공유..
https://www.acmicpc.net/problem/1450 1450번: 냅색문제 첫째 줄에 N과 C가 주어진다. N은 30보다 작거나 같은 자연수, C는 109보다 작거나 같은 음이 아닌 정수이다. 둘째 줄에 물건의 무게가 주어진다. 무게도 109보다 작거나 같은 자연수이다. www.acmicpc.net - 이분 탐색(Binary Search) - 깊이 우선 탐색(Depth First Search) 1. 30개의 물건이 있고, 이를 선택하는 경우의 수를 모두 더하는 최대 경우의 수는 이다. 따라서 O(2^N)의 시간복잡도를 가지므로 제한시간 1초인 문제에서 시간초과가 발생한다! 결국 이것을 줄일 수 있는 방법은 1. 물건들을 절반으로 분리한다.(part1 집합과 part2 집합으로 분리) 2. 각..
https://www.acmicpc.net/problem/2565 2565번: 전깃줄 첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개수는 100 이하의 자연수이다. 둘째 줄부터 한 줄에 하나씩 전깃줄이 A전봇대와 연결되는 위치의 번호와 B전봇대와 연결되는 www.acmicpc.net - 다이나믹 프로그래밍(Dynamic Programming) 예제 입력 1을 참고하여, x축은 전봇대 A에서 나가는 전깃줄, y축은 전봇대 B의 전깃줄을 표시해 봤다. 백준 사이트의 예제 입력을 보면서 이 그림을 보면 된다. 자, 이렇게 정리하면 B전봇대 기준에서의 수열은 [8, 2, 9, 1, 4, 6, 7, 10] 이다. 여기서 곰곰이 생각해 봤다. 문제에서 "없애야 하는 전깃줄의 최소 개수" 의 의..
본론으로 들어가기 전에, 군대 전역하고 최근에 열심히 사는 나 자신에게 심심한 격려의 말을 전해주고 싶다 ㅎㅎ 개인적으로 이루고 싶은 꿈이 크기에, '꾸준하고 재밌게 하자'라는 말을 항상 내 가슴속에 새겨두며 나의 나름 '첫' 해커톤, 2023 HACKUTHON 후기를 적어보려 합니다. 8월 20일 오후 1시 ~ 8월 21일 오후 5시까지 (총 28시간) 고려대학교 2023 HACKUTHON을 진행했다. 심사 및 결과 발표가 끝난 후 8시에 집에 들어왔는데, 씻고 저녁먹고 침대에 잠깐 누웠더니 눈떠보니 오전 4시.. 계속 자고 싶은데 해커톤의 그 생생한 느낌을 글로 빨리 적어보고 싶어서 이른 시간에 노트북을 켰다:) 여튼.. 결과는 !! 3등! (상금 50만원) ☺️☺️ 진짜 기획하고 발표할 땐 심사위원..
지민몬
'분류 전체보기' 카테고리의 글 목록