컴퓨터공학 83

[알고리즘/메모] 이분 탐색 binary search 코드 작성 템플릿

이분 탐색 필요하신 분 사용하세요. int left = 0; int right = LENGTH-1; while(left ANSWER){ right = mid - 1; } else { left = mid + 1; } } C++ Fast I/O C++ Fast I/O 코드도 함께 사용할 일이 있으니 참고하세요. ios_base::sync_with_stdio(false); cin.tie(NULL); 참고 자료 Fast I/O for Competitive Programming - GeeksforGeeks A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and p..

컴퓨터공학 2023.09.15

[npm] link를 사용하여 개발중인 라이브러리 로컬에서 테스트하기

개요 간단한 라이브러리를 개발하던 도중, 테스트해야 할 때가 있습니다. npm에 배포하기 전, 로컬 프로젝트에서 테스트할 수 있는 방법을 안내합니다. 전제 간단한 라이브러리의 코드는 아래와 같이 구성되어 있습니다. shelljs 라이브러리를 사용하여 터미널에 Hi를 출력하는 기능을 제공합니다. [ package.json ] ... "bin": { "script1": "bin/runScript1.js" }, ... "dependencies": { "shelljs": "^0.8.5" }, ... [ bin/runScript1.js ] #! /usr/bin/env node var shell = require("shelljs"); shell.exec("echo Hi"); link 간단한 라이브러리의 루트 디렉토..

[백준] 11052 카드 구매하기 c++ 문제 풀이

개요 대부분 풀이는 모두 DP 1차원 배열을 활용했습니다. 이 문제는 DP 2차원 배열을 통해서도 풀 수 있습니다. 로직 DP 테이블의 각 값은 i번까지의 카드를 조합해서 만들 수 있는 j개 카드 값들 중 최댓값 DP 테이블의 값을 채우는 과정에서 기존 최댓값에서 현재 카드를 추가할 수 있는 경우, 현재 카드를 추가한 경우와 기존 최댓값 사이의 대소 비교를 통해 최댓값이 결정됨을 확인할 수 있음 소스 코드 #include #include using namespace std; int DP[1001][1001]; int P[1001]; int main() { int N; cin >> N; for (int i = 1; i > P[i]; } /* 1 5 6 7 i j 1 2 3 4 개의 카드로 pn까지 활용해서..

[아키텍처] REST 아키텍처와 RESTful API에 대한 이해

개요 RESTful API는 REST 아키텍처 스타일을 만족하는 API입니다. 💡 참고 API는 Application Programming Interface의 약자로 서로 다른 어플리케이션의 상호 통신을 위한 인터페이스입니다. 만약 API 에 대한 이해가 부족하다면 IBM 유튜브를 참고하세요. 초기 웹 아키텍처의 문제 초기 웹 아키텍처에선 공통 서버-클라이언트 구현 라이브러리 CERN libwww에 의존했습니다. 이후 웹 생태계가 비대하게 성장하면서 이에 따른 새로운 하위 아키텍처에 대한 필요성이 대두되었습니다. 기존 HTTP 프로토콜 및 기존 아키텍처와 공존할 수 있으며, 확장 가능한 아키텍처가 필요했습니다. REST (Representational State Transfer) 로이 필딩은 REST ..

컴퓨터공학 2023.08.11

[노트] 23-08-10 CS 대비 노트

개인적으로 메모한 CS 면접 관련 대비 노트 입니다. 알고리즘 분할정복 퀵소트 vs 머지소트 - (pivot, partition활용, 불안전 알고리즘) vs (동일한비율, 추가 메모리 할당) LCS(최장 부분 공통 수열) - DP를 활용하여 2차원 배열로 풀 수 있다. 네트워크 URI vs URL - 이름 vs 프로토콜 + 이름 HTTP 프로토콜 - 웹 데이터 교환의 기초이자 클라이언트-서버 프로토콜 소프트웨어 공학 RESTful API - REST 아키텍처 스타일 API Git merge vs rebase - 내부적으로 과정에 차이가 있는 브랜치 병합 관련 두 명령 코드스멜 - 프로그램 소스 코드에서 문제를 일으킬 가능성 있는 경우의 집합 (지나치게 긴 주석도 이에 포함된다) 핫스탠바이 - 동일한 서버..

컴퓨터공학 2023.08.10

[운영체제] 멀티 스레드(Multi-Thread)에 대한 이해

스레드 한 프로세스 내에서 실행되는 흐름의 단위입니다. 스레드 분류 스레드는 크게 두 가지로 나뉩니다. 사용자 수준 스레드 (ULT) : 스레드 라이브러리(ex, pthread)를 사용하므로 운영체제 구분 없이 적용 가능, 그러나 스레드의 시스템 호출 수행 시 해당 스레드를 포함한 프로세스 내 다른 모든 스레드 블록 -> 성능 상 이점 별로 커널 수준 스레드 (KLT) : 같은 프로세스 내 다른 스레드 사용 가능 -> 성능 상 이점 멀티 스레드 한 프로세스 내에서 단일 스레드가 아닌 2개 이상의 스레드를 사용하는 경우 이를 멀티 스레드로 부릅니다. 멀티 스레드는 일반적으로 성능 향상에 이점이 있습니다. 각 스레드는 각각의 다른 CPU를 활용할 수 있는데, 이런 특징은 CPU를 덜 놀게 합니다. 또한 새 ..

컴퓨터공학 2023.08.10

[디자인패턴] 어댑터(Adapter) 패턴에 대한 이해

개요 어댑터 패턴은 존재하는 클래스의 인스턴스가 다른 인스턴스로 사용가능하도록 설계하는 디자인 패턴입니다. 한국 여행객이 일본에 와서 한국산 충전기 220v를 사용하기 위해 110v로 변환하는 젠더를 사용하는데, 이 때 어댑터의 역할이 젠더의 역할과 동일합니다. 주로 제 3자가 제공하는 프로그램의 일부를 자신의 프로그램에 적용하여 사용하고자 할 때, 어댑터 디자인 패턴을 활용할 수 있습니다. 구현 예를 들어 보겠습니다. 회사 A는 애플 주식을 사는 메소드를 가진 클래스를 아래와 같이 작성했습니다. interface stock { fun buy(stockName : String) } class appleStock: stock { override fun buy(stockName : String){ print..

컴퓨터공학 2023.08.09

[디자인패턴] 싱글톤(Singleton) 패턴에 대한 이해

개요 싱글톤 패턴은 클래스의 인스턴스화를 단일 인스턴스로 제한하는 소프트웨어 디자인 패턴입니다. '인스턴스'는 프로그래밍 언어마다 지칭하는 표현이 약간 다르지만 일반적으로 정의한 클래스를 현실화한(realized) 객체를 의미합니다. '인스턴스화'는 정의한 클래스 현실화를 의미합니다. 인스턴스화한 단일 인스턴스 하나를 계속 재사용하는 방식입니다. 주로 프로그램 전반에 전역으로 사용해야 하는 경우 싱글톤 패턴을 활용할 수 있습니다. 구현 코틀린에서는 object 키워드를 사용하여 싱글톤 패턴 클래스를 작성할 수 있습니다. object DataProviderManager { fun registerDataProvider(provider: DataProvider) { // ... } val allDataProv..

컴퓨터공학 2023.08.09

[알고리즘/기초] 피보나치 수

알고리즘의 기초 이론 중 하나인 피보나치 수에 대하여 간단하게 기록한 글입니다. 정의 피보나치 수는 첫째 항, 둘째 항이 1이고 N번째 항이(N>=2) 직전 두 항의 합을 값으로 가지는 수열입니다. 1. 연습 문제 기본적인 피보나치 수 관련 문제입니다. 2747번: 피보나치 수 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 1-1. 방법 (시간 초과) 재귀적인 방식으로 솔루션을 작성할 수 있습니다. 허나 이 방식으로는 연습 문제를 해결할 수 없습니다. 연습 문제의 시간 제한이 1초이기 때문입니다. #..

컴퓨터공학 2023.08.05

[C++] 벡터(vector) 를 활용하여 큐(queue) 자료구조 구현하기

배열과 다르게 크기를 동적으로 조절할 수 있어 유용한 C++의 vector를 사용하여 FIFO 자료구조 queue를 구현해 보겠습니다. 선언 vector를 사용하기 위해 아래와 같이 선언할 수 있습니다. #include ... vector queue_v; 값 마지막에 추가하기 push_back 함수를 사용하여 vector의 끝에 원소를 추가할 수 있습니다. int i=2; queue_v.push_back(i); 첫 번째 값 제거하기 vector의 erase 함수를 사용하여 vector의 가장 첫 원소의 인덱스를 제거할 수 있습니다. queue_v.erase(queue_v.begin()); 첫 번째 값 저장 후 제거하기 값을 빼기 전에 뺄 값을 다른 곳에 활용해야 할 경우가 빈번한데, fron..