개인 프로젝트 | 01 _ 웹앱 도입에 대하여
·
프로젝트
기술 스택웹앱 구축을 위한 핵심 기술 스택은 다음과 같다. Nginx : Reverse Proxy & Web Server홈서버 구축 시 Nginx는 프록시 서버 역할이 핵심이다.하지만 기본적으로 웹 서버 기능도 제공하므로, 웹앱이나 웹서비스 배포 시 함께 사용할 수 있다.즉, 웹앱 컨테이너만 별도로 구성하고, Nginx를 통해 라우팅과 정적 파일 제공을 관리하는 방식이 가능하다.FastAPI : 고성능 Python 기반 비동기 API 서버비동기 처리를 지원하기때문에 API 응답 속도가 빠르며, 간단하게 백엔드 구축 가능Pydantic을 활용한 데이터 검증과 Swagger UI 자동 생성 기능도 제공한다 Next.js : React 기반의 SSR(서버 사이드 렌더링) 프레임워크SSR과 CSR(Client ..
[백준] 1213번 : 팰린드롬 만들기 | C++
·
백준 문제풀이
0. 문제https://www.acmicpc.net/problem/1213 주어진 알파벳 대문자로 구성된 문자열을 재배열하여 팰린드롬을 만들어내는 문제입니다. 참고로 팰린드롬이란, 거꾸로 읽어도 같은 (대칭되는) 문자열을 말합니다.1. 문제풀이 핵심a) 알파벳 개수 카운팅주어진 문자열에서 각 알파벳의 개수를 카운트합니다.팰린드롬을 만들기 위해서는 문자열의 길이가 홀수일 때, 홀수인 알파벳이 정확히 1개여야 하고, 길이가 짝수일 때는 홀수인 알파벳이 없어야 합니다.b) vector를 스택처럼 활용팰린드롬을 만들기 위해 알파벳을 양쪽에 대칭으로 배치해야 합니다.이를 위해 vector를 스택처럼 사용하여 알파벳을 반으로 나누어 저장하고, 다시 역순으로 출력합니다.c) 홀수인 알파벳을 중간에 배치문자열의 길이가..
[백준] 9375번 : 패션왕 신해빈 | C++
·
백준 문제풀이
0. 문제https://www.acmicpc.net/problem/9375 1. 문제풀이 핵심 만들 수 있는 조합의 개수 계산각 의상 종류별로 가능한 조합을 구합니다. 의상을 입지 않는 경우와 해당 의상을 입는 경우를 모두 고려하면 (의상 종류의 개수 + 1)이 됩니다.모든 의상 종류별 조합을 곱한 후, 모든 의상을 입지 않는 경우(즉, 알몸인 경우)를 제외하기 위해 결과에서 1을 뺍니다. ** 모든 조합을 구하는 것이 아닌, 조합의 개수만 구하는 문제이기 때문에 기존 조합을 구하는데 사용되는 알고리즘(next_permutation, 재귀 등)이 사용되지 않습니다.  2. 문제풀이에 사용된 개념map을 활용한 데이터 저장map을 사용하여 각 의상 종류와 그 개수를 저장합니다.이미 존재하는 의상 종류인지 ..
[백준] 1620 : 나는야 포켓몬 마스터 이다솜 | C++
·
백준 문제풀이
0. 문제 https://www.acmicpc.net/problem/1620 1. 문제풀이 핵심a) map의 인덱스 접근 제한  map은 배열이나 vector처럼 인덱스를 통한 직접 접근이 불가능합니다. map은 키-값 쌍으로 이루어져 있으며, 키를 이용해 값을 찾아야 합니다. 따라서 숫자로 입력을 받았을 때, 해당 숫자에 해당하는 문자열을 찾기 위해서는 다른 방법이 필요합니다. 여기서 이유는 map의 내부 구조 때문입니다.  map의 메모리 구조와 이에 따른 인덱스 접근 불가능  map은 내부적으로 이진 트리 구조를 사용합니다. 이 때문에 요소들이 삽입되는 순서와 상관없이 자동으로 정렬(현재 노드를 기준으로 왼쪽 노드에는 작은값, 오른쪽 노드에는 큰 값)되며, 이는 키를 기준으로  이루어집니다. 또한 ..
[백준] 2559번 : 수열 | C++
·
백준 문제풀이
문제 : https://www.acmicpc.net/problem/2559 풀이 로직 :1. 부분합을 생각하기2. 반복문 시작을 0이 아닌 1로 하기3. 최대 최솟값 찾는 방법 2가지    a) max_element(배열 시작, 배열 종료) -> 전체 비교할 값을 배열에 넣어두고, 마지막에 한번에 찾는다    b) max(현재 최대값, 새로운 값) -> 반복문을 돌면서 계속 최댓값을 갱신해나가는 방법. 이를 위해선 (최대값 찾는 경우니까)가능한 가장 최소값을 초기값으로 둔 후, 최대값을 찾아나서야 한다.#includeusing namespace std;int n,k; //전체 날짜 개수, 연속날짜 개수int v[100000];int sum[100000]; //각 자리까지의 합을 더해서 저장vector s..
[백준/boj] 9996번 : 한국이 그리울 땐 서버에 접속하지 | C++
·
백준 문제풀이
문제 : https://www.acmicpc.net/problem/9996 주요 사항1. 예시에 나오는 패턴의 접두,접미사 개수가 각각한개씩이다. 그치만 문제에서는 접두접미사가 여러단어일 수 도 있다고 말해두었다. 그러므로 접두접미사를 저장할 때, char로 저장해서는 안된다 2. 패턴의 접두 + 접미사 를 더한 길이가 입력받은 문자열의 길이보다 크다면, 해당 문자열은 패턴을 포함할 수 없다는 뜻이므로 DA를 출력해야한다 풀이 코드#includeusing namespace std;int n;string p;//패턴string sP,eP;//시작 패턴, 종료패턴int main(){ ios::sync_with_stdio(0); cin.tie(0); cin>>n; cin>>p; ..
[백준/boj] 2309번: 일곱 난쟁이 | C++
·
백준 문제풀이
0. 문제https://www.acmicpc.net/problem/2309기존에 풀어봤던 문제인데, 다시 풀어보게 되었습니다.1. 문제풀이 핵심n이 9로 10 이하이기 때문에 무지성 재귀를 사용해도 괜찮습니다. ㅎㅎ 하지만 재귀에 대한 이해를 통해 조금 더 효율적인 코드를 작성할 수 있습니다.함수 종료 조건을 잘 걸어줘야 합니다. 답을 찾고 출력한 후에도 재귀가 계속 돌아가면 불필요한 연산이 이루어집니다.2. 문제풀이에 사용된 개념재귀를 사용한 조합 생성: 9명 중 7명을 골라야 한다는 것은, 9명 중 2명을 빼면 된다는 것과 같습니다. 이를 위해 누적합을 사용하여 두 명의 인덱스를 선택하는 방식을 사용했습니다.next_permutation을 이용한 조합 생성: 이 라이브러리를 사용하여 순열을 만드는 방..
개인 프로젝트 | 00 _ 개인 프로젝트 아키텍처
·
프로젝트
프로젝트를 시작한다 노력하고 집중하는 것을 힘들어하는 사람들이 매일 꾸준히 (포기하지 않고)성장할 수 있도록 도와주는 서비스이다! 언어프론트엔드 : Typescript백엔드 : Python 프레임워크웹서버, Reverse Proxy 서버 :  Nginx  웹 : Next.js / 앱 : React Native with Expo - 처음에는 무조건 어플리케이션으로 만들려고 했지만, 웹환경을 사용하고자 하는 이유는 핸드폰을 드는 순간 집중이 방해되는 개인적 경험때문. 유튜브에서 정신과 의사분들도 집중을 어려워하는 분들에게 핸드폰은 침대에 두고, 침대를 항상 등지고 생활하라고 말하신다고 하여 공부, 일을 수행하는 컴퓨터에서 언제 어디서든 가볍게(중요) 접근성좋게 사용할 수 있도록 웹으로 구현하고자 한다서버 :..
M1 VSCode에서 C++의 'bits/stdc++.h' 헤더 파일 불러오기 오류 해결 과정
·
기타
bits/stdc++.h란?C++ 표준 라이브러리의 여러 헤더 파일들을 한꺼번에 포함하는 비표준 헤더 파일입니다. 주로 코테에서 코드 작성 시간을 단축하기 위해 사용됩니다. 이 헤더 파일은 모든 c++ 표준 헤더 파일을 포함하기 때문에, 개발자가 여러 개의 헤더 파일을 일일이 #include할 필요 없이 한 번에 모든 표준 라이브러리를 사용할 수 있어 코드 작성 시간을 단축해주고, 헤더를 잘못 가져오는 등의 실수를 방지 때문에 유용하게 쓰입니다비공식 헤더 파일이므로, GCC 컴파일러에서만 기본적으로 제공됩니다. Clang이나 MSVC 같은 다른 컴파일러에서는 이 헤더 파일이 기본적으로 포함되지 않으며, 직접 생성해야 사용 할 수 있습니다. mac의 경우 clang 을 사용하여 cpp파일을 컴파일하므로 역..
presigned url을 이용하여 S3에 이미지 업로드하기 (+ S3버킷 접근 권한 을 관리하는 몇가지 방법들)
·
프로젝트
이번엔 Canva앱을 만들어보게 되었습니다간단히 설명하면 "[내 얼굴 사진]을 올리고 [중세시대 기사]라는 프롬프트를 작성하면 [중세시대 기사인 나]의 사진을 만들어주는 서비스" 입니다. Canva 앱이니까 언제든 접근되어야하고 여러 사용자를 대상으로 오래 구동될 서비스입니다.  즉, 불특정 다수의 사용자가 브라우저에서 S3 버킷으로 이미지를 업로드해야하는 서비스 입니다 S3버킷 접근 권한 관리 방법(기본적으로 S3 퍼블릭 엑세스 차단 설정을 깔고 갑니다)우선 결론부터 말하자면 다음과 같습니다. 결론.   [ S3 pre-signed url + CloudFront 로 S3 접근 권한 관리 ] : aws에서 권장하는 방식presigned url을 가진 사용자는 인증된 사용자로서 s3 접근(파일 업로드,다운..