본문 바로가기

전체 글

(336)
백준 1106 호텔 (C++) https://www.acmicpc.net/problem/1106Cost, Value가 정해져 있는 다이나믹 프로그래밍 배낭문제이다.다만 이 문제는 평범한 배낭문제와 달리 중복을 허용한다. 그래서 이 문제는 일반적인 배낭 문제의 변형이다. 일반적인 식은 다음과 같다.for(int i = 1; i = cost){ dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - cost] + value); } else{ dp[i][j] = dp[i - 1][j]; } } } i번의 행을 만들 때는 i - 1번 행을 보고 표를 갱신하게 된다. 그래서 i - 1행에는 당연히 이번 아이템이 ..
Spring 새로운 HTTP 클라이언트 - RestClient Spring 프레임워크가 제공하는 REST Request 엔드포인트RestClient - synchronous client with a fluent API.WebClient - non-blocking, reactive client with fluent API.RestTemplate - synchronous client with template method API.HTTP Interface - annotated interface with generated, dynamic proxy implementation.RestClient가장 최근 추가된 HTTP 클라이언트로, RestTemplate의 불편함 때문에 사용하던 WebClient는 MVC에서 사용하기 위해 block처리를 해줘야하는 번거로움과 쓰지않는 라..
백준 1644번 - 소수의 연속합 (C++, 에라토스테네스의 체, 누적합, 투포인터) https://www.acmicpc.net/problem/1644 아주 어려운 문제는 아니나, 에라토스테네스의 체, 누적합, 투포인터라는 삼박자를 알고 있어야 풀 수 있는 문제였다. 에라토스테네스의 체 문제를 연속으로 풀다보니 대체 고대 그리스의 철학자들은 얼마나 천재인건가 가늠도 안된다.  아무튼 문제는 다음과 같은 단계로 이루어진다. 1. 에라토스테네스의 체를 사용해 소수 판별2. 누적합을 통해 각 소수의 범위 prefix 배열 처리3. 투포인터를 활용해 연속합중 N과 같은 것들 처리  https://tigerfrom2.tistory.com/433 알고리즘 - 에라토스테네스의 체(C++)최근 코딩테스트에서 소수를 판별해야하는 문제가 나왔다. 그래서 에라토스테네스의 체를 사용해야함을 바로 알았지만 아쉽..
네이버 부스트캠프 9기 챌린지를 수료하며 난 지금까지 뭘 한것인가…챌린지 첫주차가 끝났을 때 든 생각이다. 대학에서 나름 열심히 했다고 했는데 첫 주차부터 컴퓨터구조 강의에서 배웠던 프로세스 메모리 지식이 부족해 애먹었고 구현할 때도 능력 부족이 느껴졌다. 그런데 피어세션 시간에 다른 팀원들의 작업물을 보니 너무 훌륭하게 이론부터 구현까지 해낸 분이 계셨다. 부럽기도하고 열등감이 느껴졌다.열등감은 나를 좀먹으며 학습보다 구현에 열중하게 만들었다. 피어세션에서 “구현했다” 라고 말하기 위해서, 피어 채점에서 체크를 받기 위해 학습보다 ChatGPT를 닥달하고 이론과 동떨어진 구현만을 위한 코드를 짰다.그러다보니 시간은 시간대로 가고 남는 것은 지저분한 코드와 내가 뭘 구현한건지도 모를 이상한 것이 만들어졌다. ReadMe를 쓰다보니 이건 정말 아..
페이징과 가상 메모리 가상 메모리가상 메모리는 사용자와 논리적 주소를 물리적으로 분리하여 사용자가 메인 메모리 용량을 초과한 프로세스에 주소를 지정해서 메모리를 제한 없이 사용할 수 있도록 하는 개념이다.요구 페이징페이징 (paging)프로세스의 논리 주소 공간을 페이지라는 일정 단위로 자르고, 메모리의 물리 주소 공간을 프레임이라는 페이지와 동일한 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 가상 메모리 기법요구 페이징은 가상 메모리에서 많이 사용하는 메모리 관리 방법이다. 스와핑을 사용하는 페이징 시스템과 비슷하다.프로그램을 실행하기 위해 프로그램의 일부만 메인 메모리에 적재하되, 순차적으로 작성되어 있는 프로그램의 모듈을 처리할 때 다른 부분은 실행하지 않는다는 특징을 이용한다.
Promise 문법 사용하기 Javascript는 파일 읽기, 쓰기, 등 많은 비동기 작업이 필요하다. 그 중 대표적으로 사용되는 것이 Promise이다.function promiseStudy(param){ return new Promise(function(resolve, reject){ setTimeout(function(){ if(param){ resolve("성공") }else{ reject("실패") } }, 3000) })}setTimeout( function(){ promiseStudy(true).then(function(temp){ console.log(t..
telnet vs SSH Telnet vs SSHTelnet은 TCP/IP를 기준으로 한 가상 터미널 서비스를 위한 프로토콜이며 SSH는 네트워크를 통해 다른 컴퓨터에 로그인하여 원격 컴퓨터에서 명령을 실행하는 프로그램Telnet은 로컬 네트워크용으로 특별히 설계된 23번 포트를 사용하며 SSH는 21번 포트를 사용한다.보안텔넷은 보안이 취약하다. 데이터를 암호화하지 않고 전송하기 때문에 네트워크에서 통신 내용을 쉽게 도청할 수 있다.SSH는 보안을 강화한 프로토콜로 모든 데이터 전송이 암호화되어 이뤄진다.기능텔넷은 기본적으로 텍스트 기반의 원격 쉘 세션을 제공포트포워딩, 파일 전송, 터널링 등 다양한 네트워크 서비스를 제공최근 telnet이 사용되는 모든 곳은 ssh로 대체되었다고 봐도 무방하다.
vector<int> 보다 vector<bool> 이 느리다? 문제를 풀다가 vector 로 요소 체크를 하면 통과하는데 vector 로 처리하니까 TLE가 발생했다.이게 뭔 개소리야가 절로나와서 찾아보니 bool의 저장 방식 떄문이었다.메모리 배치 및 엑세스 속도vector 의 경우내부적으로 int 타입의 배열과 비슷하게 배치된다.vector 의 경우메모리를 효율적으로 관리하기 위해 한 번에 여러개의 bool 값을 저장할 수 있는 bitfield로 구현된다. 즉, 하나의 정수에 여러 bool 값을 비트 단위로 저장하게 된다.그래서 만약 저장된 bool 값을 조작하려면 해당 비트를 조작하기 위한 비트마스크 연산이 추가로 필요하게 되어 오버헤드가 발생하기 때문에 vector은 속도가 저하게된다.결론은, bool 은 메모리 효율을 위해 시간 효율을 희생했다고 보면 된다..