LeetCode - 3335. Total Characters in String After Transformations I
·
Algorithm
문제링크 문제 설명문자열 s와 정수 t가 주어집니다. 여기서 t는 총 변환 횟수를 나타냅니다.한 번의 변환(Transformation)에서 문자열 s의 모든 문자는 다음 규칙에 따라 변경됩니다:문자가 'z'인 경우 → 'ab'로 확장문자가 'z'가 아닌 경우 → 알파벳 상 다음 문자로 변경예: 'a' → 'b', 'b' → 'c', ..., 'y' → 'z'정확히 t번의 변환을 수행한 뒤의 문자열 길이를 구하세요.결과가 매우 클 수 있으므로, 정답을 10^9+7 로 나눈 값을 반환하세요.제한 사항1 s consists only of lowercase English letters.1 예시Example 1:Input: s = "abcyy", t = 2Output: 7Explanation:First Trans..
마이크로서비스 설계 패턴 핵심 요약
·
System Architecture
마이크로 서비스일반적으로 프로젝트를 진행하게 되면 하나의 서버에 모든 서비스 코드가 들어가게 됩니다. 이런 방식을 모놀리식 아키텍쳐라고 부릅니다. 모놀리식 아키텍쳐는 개발에는 용이하지만 이후에 서비스가 성공하여 규모가 매우 커지게 되면 여러 문제점이 발생할 수 있습니다.유연성 저하 : 간단한 수정 사항에도 전체 애플리케이션을 다시 빌드하고 배포해야 합니다.확장성 한계 : 특정 기능에만 부하가 증가해도 해당 기능만 확장하는 것이 아닌 전체 애플리케이션을 확장해야 합니다.기술 선택의 제약 : 전체 애플리케이션을 하나의 기술 스택으로 구현해야 하기 때문에 기술 도입이나 부분적인 기술 변경에 제약이 있습니다.장애의 영향 범위 확대 : 특정 기능의 장애가 전체 애플리케이션의 장애로 이어질 수 있습니다.이런 문제점..
LeetCode - 790. Domino and Tromino Tiling
·
Algorithm
문제링크 문제 설명너비가 n, 높이가 2인 보드가 주어집니다. 이 보드를 다음 두 종류의 타일로 채우려 합니다:도미노 타일 (2×1)트로미노 타일 (L자 모양의 3칸) – 회전 가능모든 칸은 타일로 정확히 한 번씩 덮여야 하며,두 타일링이 서로 다르다고 간주되는 경우는 다음과 같습니다:서로 상하좌우로 인접한 두 칸이 있을 때, 한 타일링에서는 하나의 타일이 두 칸 모두를 덮고 있지만,다른 타일링에서는 그렇지 않은 경우정수 n이 주어질 때,2 × n 보드를 타일링하는 서로 다른 방법의 수를 구하세요.단, 정답이 매우 클 수 있으므로 10⁹ + 7로 나눈 나머지를 반환하세요.제한 사항1 예시Example 1:Input: n = 3Output: 5Explanation: The five different way..
LeetCode - 1007. Minimum Domino Rotations For Equal Row
·
Algorithm
문제링크 문제 설명도미노 타일들이 일렬로 나열되어 있으며,각 도미노의 윗면과 아랫면 숫자가 tops[i]와 bottoms[i]로 주어집니다. (각 숫자는 1부터 6 사이입니다.)각 도미노는 회전시킬 수 있습니다, 즉, tops[i]와 bottoms[i]의 값을 서로 바꿀 수 있습니다.당신의 목표는 다음 중 하나를 만드는 것입니다:tops 배열의 모든 값이 동일해지도록,또는 bottoms 배열의 모든 값이 동일해지도록.가능하다면, 그렇게 만들기 위해 필요한 최소 회전 횟수를 반환하고, 불가능하다면 -1을 반환하세요.제한 사항2 bottoms.length == tops.length1 예시Example 1:Input: tops = [2,1,2,4,2,2], bottoms = [5,2,6,2,3,2]Output..
당신이 알아야 할 시스템 설계의 핵심 개념 20가지 - 2. 캐싱
·
System Architecture
1. 캐싱이란캐싱이란 자주 사용되는 데이터의 복사본을 캐시 또는 임시 저장 위치에 저장하여 빠르게 접근할 수 있도록 하는 프로세스를 의미합니다.왜 사용할까클라이언트에서 서버에 데이터를 요청하거나 서버에서 DB의 데이터를 읽어오는 등 데이터를 받아올 때는 항상 일정 리소스가 소모됩니다. 그래서 원래의 데이터보다 더 빠르게 접근이 가능한 곳에 복사본을 위치시켜 리소스를 줄이고 응답 시간을 향상 시키기 위해 캐싱을 사용하게 됩니다. 보통 Redis를 활용하여 캐싱을 사용합니다. 2. 캐싱 전략1) 읽기 전략 (Read Strategies)Look Aside데이터를 찾을 때 캐시에 데이터가 있는지 먼저 확인한 후 만약 캐시에 데이터가 없으면 DB에서 조회하는 전략입니다. 읽기 작업이 빈번한 경우에 적합하지만 데..
당신이 알아야 할 시스템 설계의 핵심 개념 20가지 - 1. 로드 밸런싱
·
System Architecture
1. 로드 밸런싱이란로드 밸런싱은 애플리케이션을 지원하는 리소스 풀에 들어오는 네트워크 트래픽(들어오는 요청)을 균등하게 분산하는 것을 의미합니다. 간단히 비유하면 은행에서 고객들(네트워크 트래픽)을 대기 번호표를 뽑게 한 뒤 여러개의 창구(서버)에서 각 고객의 업무를 처리한다고 볼 수 있을 것 같습니다.왜 필요할까?대부분의 간단한 프로젝트에서는 요청이 많이 들어올 일이 거의 없습니다. 그래서 한 대의 서버로도 충분히 트래픽을 감당할 수 있습니다. 하지만 커다란 서비스(토스, 배민, 네이버, 등...)에서는 매우 많은 요청이 들어오기 때문에 한 대의 서버로는 그 트래픽을 감당하기 힘듭니다. 그래서 여러 대의 서버를 구축해 트래픽을 나눠서 서버 1대가 처리하는 트래픽을 줄이기 위해 로드 밸런싱을 사용합니다..
당신이 알아야 할 시스템 설계의 핵심 개념 20가지 - 0. 개론
·
System Architecture
일반적인 시스템 설계일반적으로 개인이나 동아리 or 부트캠프에서 프로젝트를 진행하게 되면 서버 1대, DB 1대를 둔 아래와 같은 설계를 따릅니다.대부분의 개인이나 팀으로 이뤄지는 프로젝트는 많은 트래픽이 발생하지 않습니다. 1대의 서버로도 충분히 감당할 수 있을 정도로요.하지만 갑자기 프로젝트가 알려지면서 트래픽이 몰리면 어떻게 될까요? 각 서버는 성능에 따라 처리할 수 있는 트래픽의 양이 한정되어 있습니다. 그래서 과도한 트래픽을 받게 되면 서버에 장애가 발생할 수 있습니다.만약 복잡한 것이 싫다면 이런 상황에서 서버의 성능을 올리는 것으로 간단하게 해결할 수 있습니다. 더 좋은 CPU나 RAM을 가진 서버로 업그레이드를 하면 더 많은 트래픽을 처리할 수 있습니다. 이를 Scale Up이라고 부릅니다..