SQL과 NoSQL
·
Computer Science/Database
SQL관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 프로그래밍 언어장점데이터는 정해진 데이터 스키마에 따라 테이블에 저장 → 무결성 보장스키마: 테이블, 열, 관계, 제약 조건 등의 정보를 포함데이터는 관계를 통해 여러 테이블에 분산정규화 과정 (데이터의 중복을 피하고 일관성을 유지하기 위한 원칙)ACID 원칙을 준수하여 트랜잭션의 안정성 보장단점스키마 변경이 어려워 유연성이 떨어짐복잡한 조인 쿼리로 인한 성능 저하 가능성대체로 수직적 확장만 가능수평적 확장이 어려운 이유테이블 간 관계로 데이터 분산이 복잡함스키마 변경 시 모든 서버에 영향ACID 준수를 위한 오버헤드 발생JOIN 연산이 서버 간에 이루어져야 하므로 성능 저하사용 사례금융, 결제 등 데이터 정합성이 중요한 ..
이진탐색트리
·
Computer Science/Data Structure
이진탐색(Binary Search)탐색에 소요되는 시간: O(log n)삽입/삭제 불가연결리스트(Linked List)탐색에 소요되는 시간: O(n)삽입/삭제에 소요되는 시간: O(1)이진탐색트리(Binary Search Tree)이진탐색(탐색) + 연결리스트(삽입/삭제)탐색/삽입/삭제에 소요되는 시간최적 및 평균: O(log n)트리의 높이에 비례최악: O(n)치우친 트리의 경우 장점검색, 삽입, 삭제 모두 평균적으로 O(log n) 성능중위 순회시 정렬된 순서로 데이터 접근 가능 유연한 크기 조정 가능 단점 균형이 무너지면 성능이 O(n)까지 저하될 수 있음이진탐색트리의 단점인 불균형 문제를 해결하기 위해 자가균형 이진탐색트리(삽입/삭제 연산 시 트리를 재조정)를 사용할 수 있음AVL TreeRed..
[Silver III] N과 M (1) - 15649
·
코딩테스트/백준
[Silver III] N과 M (1) - 15649문제 링크성능 요약메모리: 23052 KB, 시간: 236 ms분류백트래킹제출 일자2024년 11월 9일 16:02:47문제 설명자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열입력첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)출력한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.수열은 사전 순으로 증가하는 순서로 출력해야 한다. import java.io.*;import java.util.*;class Main { stat..
[level 3] 다단계 칫솔 판매 - 77486
·
코딩테스트/프로그래머스
[level 3] 다단계 칫솔 판매 - 77486문제 링크성능 요약메모리: 126 MB, 시간: 61.13 ms구분코딩테스트 연습 > 2021 Dev-Matching: 웹 백엔드 개발자(상반기)채점결과정확성: 100.0합계: 100.0 / 100.0제출 일자2024년 11월 08일 21:46:24문제 설명민호는 다단계 조직을 이용하여 칫솔을 판매하고 있습니다. 판매원이 칫솔을 판매하면 그 이익이 피라미드 조직을 타고 조금씩 분배되는 형태의 판매망입니다. 어느정도 판매가 이루어진 후, 조직을 운영하던 민호는 조직 내 누가 얼마만큼의 이득을 가져갔는지가 궁금해졌습니다. 예를 들어, 민호가 운영하고 있는 다단계 칫솔 판매 조직이 아래 그림과 같다고 합시다.민호는 center이며, 파란색 네모는 여덟 명의 판매..
[Silver III] 바이러스 - 2606
·
코딩테스트/백준
[Silver III] 바이러스 - 2606문제 링크성능 요약메모리: 14332 KB, 시간: 104 ms분류그래프 이론, 그래프 탐색, 너비 우선 탐색, 깊이 우선 탐색제출 일자2024년 11월 3일 18:14:32문제 설명신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다.예를 들어 7대의 컴퓨터가 과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸리게 된다. 하지만 4번과 7번 컴퓨터는 1번 컴퓨터와 네트워크상에서 연결..
힙(heap)
·
Computer Science/Data Structure
힙(heap) : 데이터에서 최댓값과 최솟값을 빠르게 찾기 위해서 고안된 완전 이진 트리 형태의 자료구조 힙을 통해 우선순위큐를 효율적으로 구현할 수 있음힙의 특징완전 이진 트리 구조를 가짐부모 노드와 자식 노드 간의 대소 관계가 성립함 (형제 노드 간 관계 없음)최대 힙(Max Heap)과 최소 힙(Min Heap) 두 종류가 존재최댓값 최솟값 조회의 시간 복잡도: O(1)삽입/삭제 연산의 시간 복잡도: O(log n)완전 이진 트리(Complete Binary Tree): 모든 레벨이 완전히 채워져 있으며, 마지막 레벨에서는 노드들이 가능한 가장 왼쪽부터 채워져 있는 이진 트리 최대 힙: 루트 노드가 최댓값 → 부모 노드(key) ≥ 자식 노드(key)최소 힙: 루트 노드가 최솟값 → 부모 노드(ke..
[level 2] 큰 수 만들기 - 42883
·
코딩테스트/프로그래머스
[level 2] 큰 수 만들기 - 42883문제 링크성능 요약메모리: 116 MB, 시간: 76.25 ms구분코딩테스트 연습 > 탐욕법(Greedy)채점결과정확성: 100.0합계: 100.0 / 100.0제출 일자2024년 10월 31일 04:13:30문제 설명어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다.예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다.문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 retur..
캐시매핑
·
Computer Science/Operating System
캐시의 크기는 메모리보다 작기 때문에 효율적으로 매핑하는 것이 중요하다적절한 매핑 기법을 사용하면 캐시 적중률을 높일 수 있어 전체 시스템의 성능이 향상된다운영체제의 메모리 관리운영체제는 메모리를 똑같은 크기의 페이지(4kb)로 나눠 관리를 한다 주소 구조가상 주소는 로 구성P(Page Number): 페이지 번호 (20bits로 관리)D(Page Offset): 페이지번호로부터 해당 주소까지의 거리 (12bits로 관리) 가상 주소와 물리 주소가상 주소: 프로그램이 사용하는 주소(20bits)물리 주소: 실제 메모리의 주소(16bits) 주소 변환가상 주소를 물리 주소로 변환할 때 페이지 테이블을 사용Page Number만 변환되고 Page Offset은 그대로 유지 매핑의 종류1. 직접매핑메모리의 특..
캐시히트와 캐시미스
·
Computer Science/Operating System
캐시속도가 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리 캐시는 반응 속도가 빠른 SRAM(Static Random Access Memory)으로 주소가 키(Key)로 주어지면 해당 공간에 즉시 접근할 수 있음이러한 특성은 DRAM(Dynamic Random Access Memory)도 동일하지만 하드웨어 설계상 DRAM은 SRAM보다 느림DRAM은 행과 열을 순차적으로 활성화하여 데이터에 접근하며 이 과정에서 추가적인 지연이 발생하기 때문 캐시를 설정할 때는 자주 사용하는 데이터를 기반으로 설정함이 때 지역성을 기반으로 설정되는데, 시간 지역성과 공간 지역성으로 나뉨 int[] arr = new int[10];for(int i=0; i시간 지역성(temporal local..
RestControllerAdvice를 통한 예외 관리
·
Spring
전역적인 예외 처리를 위해 기존 프로젝트에 Controller Advice를 도입하였다. 기존의 Controller 코드@GetMapping("/list")public ResponseEntity> list(@AuthenticationPrincipal MemberDetailsImpl memberDetails) { // 사용자카드 리스트 가져오기 try{ return new ResponseEntity(userCardService.getUserCardByUserId(memberDetails.getMember().getId()), HttpStatus.OK); } catch (RuntimeException e){ return new ResponseEntity(HttpStatus..