Posts

Showing posts from December, 2024

스트링 디코드 문제에서 망하고, 43분 후 복수에 성공한 이야기 (feat. 중첩 괄호도 처리함)

## 🔧 배경 얼마 전 기술 면접을 보다가 `decodeString` 문제를 받았습니다. 알고리즘 공부는 주로 BFS, DFS 쪽만 하던 터라, 문자열 파싱 문제에서 완전히 발목 잡혔습니다. 거기다 라이브 코딩. 제한 시간 30분. 당연히… 못 풀었죠. 멘탈까지 디코딩당한 날이었습니다. --- ## 🔥 복수의 시작 면접이 끝난 뒤에도 이 문제는 계속 머릿속을 맴돌았습니다. “내가 이걸 못 풀었다고? 진짜?” 그 순간부터 **마음속의 디버거**가 켜졌고, 라이브 코딩에서 시도했던 방식에서 출발해 다시 파기 시작했습니다. 스택도 쓰지 않았습니다. 재귀도 쓰지 않았습니다. 그냥 제 방식대로, 끈질기게 문자열을 조작하면서 풀었습니다. **걸린 시간: 추가 43분.** --- ## 🧠 접근 방식 요약 - `[`와 `]`를 찾는다. 가장 안쪽 괄호부터 시작. - 그 안의 문자열을 꺼내고, 반복 횟수를 계산한다. - 원래 문자열 배열을 `splice`로 조작해서 새로운 문자열을 삽입한다. - 그리고… **처음부터 다시 돌린다.** - 이걸 괄호가 다 없어질 때까지 반복한다. 사실상 **재귀를 흉내 내는 루프 기반 수동 파서**입니다. --- ## ✅ 최종 코드 (with 주석) ```javascript /** * @param {string} s * @return {string} */ var decodeString = function(s) { const strArr = s.split(''); let startIndex = -1; let endIndex = -1; for(let i = 0; i = 0 && endIndex >= 0 && endIndex > startIndex){ const addedStr = strArr.slice(startIndex + 1, endIndex).join(''); ...

깃 브랜치 관리

Image
> 깃 브런치 관리 현황 정리 문서 > # 세부 브런치별 기능 및 역할 ## main - 실제 사용자가 사용중인 상태 - Hotfix 가 포함되어있을 수 있음 (Code push 사용) ## dev - feat, fix branch 에서 개발 완료된 기능을 1차적으로 dev branch를 통해 merge해, 상호 파일간 호완 수준 및 빠른 개발 및 실험이 이뤄지는 branch, 각 파일은 기능별, 구조별로 각 개인이 만든 코드이다. - 해당 단계에서는 merge할 경우, merge 이후 충돌 발생여부를 체크해야하며, 충돌 발생시 해결 순서는 다음과 같다. 1. 최신 dev branch 를 pull 한 후 개인의 branch 를 최신 dev 위로 rebase 1. 대부분 1번에서 해결되며 해결되지 않는 상황에서는 2번 이후를 진행 2. 에러 발생 코드 위치 확인 3. 코드 작성일과 작성자 확인 4. 문제에 대한 원인 분석 1. 작성자와 협업이 가능한 경우, - 상호 코드간 충돌이 일어나는지 확인 후 코드 스타일 변경 2. 작성자와 협업이 불가능한 경우, - 작성자의 코드를 현재 작성한 본인 코드에 맞게 수정 - dev branch를 통해 문제가 발생하지 않은경우, release branch 로 merge - release branch merge 조건 1. 상호 호환되는 코드의 개발이 더 이상 진행되고 있지 않은 경우, 2. 목표로한 sprint 기능 및 오류 수정의 단계가 종료된 경우, 3. QA 가 종료된 경우 ## feat - 앱 내 기능 개발이 진행되는 branch - 새로운 기능 추가 혹은 기존의 기능을 수정하는 작업(Business logic 변경)이 진행된다. - 기능 개발이 완료된 feat branch의 경우 진행 순서 - **dev** branch...

CORS Trouble shooting

Image
1. 서버 측 CORS 1. 원본 요청 정책만 수정하고 응답 헤더 정책을 설정하지 않으면 Access-Control-Allow-Origin 헤더를 리스폰스해주지 않아 브라우저에서 출력하지 않음 2. 클라이언트 측 1. Referrer-Policy - **no-referrer**: `Referer` 헤더 생략 - **no-referrer-when-downgrade**: 프로토콜 보안 수준이 동일하거나 더 높을 때(`HTTP->HTTP`, `HTTP->HTTPS`, `HTTPS->HTTPS`)는 Full URL을, 더 낮을 때(`HTTPS->HTTP`, `HTTPS->File`)는 No data - **origin**: Origin만 전송 - **origin-when-cross-origin**: 동일한 프로토콜 보안 수준에서 same-origin 요청일 때는 Full URL을, cross-origin 요청 및 보안 수준이 낮을 때는 Origin만 전송 - **same-origin**: same-origin일 때는 Full URL을, cross-origin일 때는 생략 - **strict-origin**: 프로토콜 보안 수준이 동일할 때(`HTTP->HTTP`, `HTTPS->HTTPS`)에 한해 Origin만 전송 - **strict-origin-when-cross-origin**: same-origin일 때는 Full URL, cross-origin일 때는 프로토콜 보안 수준이 유지될 때에 한해 Origin만 전송, 보안 수준이 낮아진다면 No data - **unsafe-url**: 무조건 Full URL **(권장되지 않음)** - 클라이언트 사이드에서 Referrer-Policy 를 설정하지 않으면 브라우저 기본 Poli...

Popular posts from this blog

Operating System Concepts 9th

스티키 헤더 여러개 만들기 (Multiple sticky header)

Operating System Concept