일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자료구조
- 클라우드
- VPC
- 로드밸런서
- Elasticsearch
- Kafka
- gcp
- JPA
- 카프카
- Spring Data JPA
- springboot
- 스프링
- Spring
- 클라우드 컴퓨팅
- 백트래킹
- 쿠버네티스
- 알고리즘
- aws
- Docker
- Apache Kafka
- 스프링부트
- 백준
- 오일러프로젝트
- 프로그래밍문제
- DFS
- Spring Boot
- 월미도
- 인천여행
- 코드업
- 스프링 부트
- Today
- Total
목록분류 전체보기 (120)
GW LABS
영어 기수로 수를 샜을 때, 몇 개의 영어 기수로 수를 샜을 때, 몇 개의 문자를 사용했는지 계산하는 문제이다. 처음 문제를 보고 겁을 먹었지만, 해쉬 테이블을 사용하면서 규칙을 유추해보니 생각보다 쉬운 문제였다. #include #include #include using namespace std; map cardinal = { {1, 3}, {2, 3}, {3, 5}, {4, 4}, {5, 4}, {6, 3}, {7, 5}, {8, 5}, {9, 4}, {10, 3}, {11, 6}, {12, 6}, {13, 8}, {14, 8}, {15, 7}, {16, 7}, {17, 9}, {18, 8}, {19, 8}, {20, 6}, {30, 6}, {40, 5}, {50, 5}, {60, 5}, {70, 7..
처음에 이 문제를 접근할 때 long double을 이용해서 해결을 하려고 했지만 숫자가 너무 컸기 때문에 자리수를 모두 구할 수 가 없었다. 자료형의 최대치를 넘어가는 숫자를 연산하려면 어떻게 해야할까? 단순히 동적배열에 연산을 하고 자리수에 해당하는 숫자를 연속적으로 할당하면 해결할 수 있다. #include #include #include using namespace std; int main() { vector a; a.push_back(2); int cases = 999; while (cases--) { for (int idx = 0; idx < a.size(); idx++) a[idx] *= 2; for (int idx = 0; idx = 10) { if (idx == a.size() - 1) ..
해당 문제는 백트래킹 방식으로 연속된 부분수열을 포함하지 않는 수열을 만들어내는 문제이다. 생각해내는데 많은 시간이 들었고, 수열을 체크하는 함수 디버깅에 많은 시간이 소요됐다. 집중할 수 있는 환경을 만들고, 내 알고리즘을 먼저 의사코드로 만들어 낸 후 작업을 진행하는 훈련을 계속 진행해야한다. 아래는 정답 소스이다. #include #include using namespace std; string numbers[3] = {"1", "2", "3"}; bool checkSeries(const string& series) { bool result = true; int sizeIdx = 2; int firstIdx = 0; int seriesSize = series.size(); if (seriesSize
1~N까지 차례대로 적힌 수열에서 연산자들을 선택하여 전체 계산결과가 0이 되도록 만드는 문제이다. 문제 분류가 백트래킹으로 되어 있는만큼 전형적인 백트래킹 기법으로 풀이가 가능하다. 시간을 많이 허비했는데 적절한 자료구조와 c++ 벡터에서 요소를 지우고 난 후에 인덱스를 어떻게 처리할 것인지 로직구성에 애를 먹었다. #include #include #include using namespace std; vector opers; char oper[3] = {' ', '+', '-'}; int calculate(int N) { vector tmp; vector eraseIdx; deque numbers; // 임시 숫자 배열생성 for (int i = 1; i
위의 그림처럼 2*n 그리드에에 2 * 1 크기의 블럭을 채울 수 있는 방법의 수를 구하는 문제이다. 처음에는 그리드에 대한 배열을 생성해서 브루트포스 방식으로 모든 방법을 탐색하려고 했다. 차분히 더 생각을 해보니 그런 배열은 필요가 없고 블럭을 세로로 배치하는 경우에는 1만큼 이동하고, 가로로 배치하는 경우에는 2만큼 이동했다고 생각하면 간단한 재귀함수로 풀이가 가능하다. 아래는 아이디어를 구현한 결과물이다. #include using namespace std; int answer = 0; void fillGrid(int idx, int len) { // 기저사례: 범위를 넘었다면 종료 if (idx > len) return; // 기저사례: 끝까지 채웠다면 종료 if (idx == len) { an..
처음 접근할 때에는 모든 분해합을 구하면서 가장 작은 생성자를 구하려고 했다. 이럴 경우 숫자가 커지면 커질수록 생성자를 계산하는 과정이 늘어나게 된다. 해법은 입력으로 들어온 숫자에서 자리수 * 9를 빼주면 범위를 상당히 좁힐 수 있다. 아래는 해당 구현법을 적용한 C++ 소스이다. #include using namespace std; int cntPos(int number) { int cnt = 0; while (number) { number /= 10; cnt++; } return cnt; } int sumPosNumbers(int number) { int sum = 0; while (number) { sum += number % 10; number /= 10; } return sum; } int ..
사용자가 웹 어플리케이션을 사용하면서 성능이슈를 느끼는 지점은 브라우저에서 해당 페이지를 로드할 때이다. 이미지들을 포함한 자바스크립트 파일, CSS파일 등을 로드하면서 지연시간이 커진다면 사용자를 이탈하게 만들 수 도 있을 것이다. 또 구글 에드센스와 같은 외부의 광고를 노출하면서 성능이슈가 발생할 수도 있다. 이러한 웹 앱의 성능이슈를 체크하고 올바른 해결책을 찾도록 도와주는 툴이 '라이트하우스'이다. 라이트하우스는 크롬 브라우저의 확장 프로그램으로 설치하여 브라우저에서 직접 자신이 성능측정 하고자 하는 곳에서 성능을 측정할 수 있다. 자동화해서 주기적으로 성능을 측정하려면 NodeJS 앱 형태로 설치하여 커맨드라인에서 실행하는 것도 가능하다. 이번 포스팅에서는 라이트하우스 도커 이미지를 빌드해서 앱..
클라이언트에서 여러 개의 파일을 다운로드 요청을 할 때 브라우저마다 동작을 다르게해서 문제가 될 수 있는 부분이 있다. 하나의 파일 다운로드 요청이 끝나기 전에 다음 요청을 전송할 경우, 크롬 브라우저에서는 이전의 요청을 취소해버릴 수도 있다. 이런 현상을 우회해서 다중의 파일 다운로드를 클라이언트에서 구현하려면 Ajax 요청으로 구현하면 된다. 서버 파일 전송코드 PHP 예제 header("Content-Disposition: attachment; filename= \"".$file_name."\""); header("Content-type: application/octet-stream;"); header('Content-Length: '.$fsize); header("Content-Transfer-E..