앞선 글에서는 나오지 않았던 개념이나 헷갈리는 문제들을 토대로 정리하고 '데이터 모델링의 이해' 챕터를 마무리하고자 합니다. 데이터 모델링✅ 데이터 모델링 시 유의점 3가지! 중복: 중복은 데이터의 무결성을 저해하고 저장 공간의 낭비를 초래할 뿐만 아니라, 데이터 갱신 시 일관성 문제를 발생시킬 수 있습니다. 따라서, 데이터 모델링 과정에서는 같은 데이터를 사용하는 사람, 시간, 그리고 장소를 정확히 파악하여 중복성을 최소화해야 합니다. 비유연성: 데이터 모델의 설계는 업무의 변화에 유연하게 대응할 수 있도록 해야 합니다. 비유연한 데이터 모델은 사소한 업무 변화에도 모델을 수시로 변경해야 하며, 이는 유지보수의 어려움을 가중시킵니다. 이를 방지하기 위해, 데이터의 정의를 데이터의 사용 프로세스와 분리..
이번에는 엔티티의 속성, 관계, 식별자 등에 대해 정리해 보겠습니다. 속성(Attibutes)데이터 모델링 과정에서 엔티티를 정의한 후, 그 다음 과정은 각 엔티티의 세부 특성을 나타내는 '속성'을 식별하는 것이라고 볼 수 있습니다.속성은 데이터 모델의 근본적인 구성 요소 중 하나로, 데이터베이스에서 관리되는 데이터의 성격과 특성을 정의합니다. ✅ 속성이란?속성은 데이터베이스 시스템에서 엔티티를 구성하고, 엔티티의 특성을 설명하는, 더 이상 쪼개지지 않는 데이터의 최소 단위입니다.예를 들어, '직원' 엔티티의 경우 '이름', '주소', '전화번호' 등이 이에 해당합니다.각 속성은 엔티티의 구체적인 정보를 나타내며, 이 정보를 통해 엔티티의 인스턴스를 구별할 수 있습니다. ✅ 속성값이란?속성값은 속성에 할..
이번 카테고리에서는 SQLD 자격증의 첫 번째 파트인 '데이터 모델링의 이해'에 초점을 맞추어, 데이터 모델링이 무엇인지, 왜 중요한지에 대해 알아보고자 합니다.추가적으로 SQLD 자격증을 따기 위해 공부한 내용들을 정리하면서 추후에도 살펴볼 수 있도록 하고자 합니다!먼저 데이터 모델에 대한 설명을 정리해보겠습니다. 데이터 모델이란? 데이터 모델링은 복잡한 현실 세계의 정보를 컴퓨터 시스템에서 사용할 수 있도록 체계적으로 조직화, 정의, 관리하는 과정입니다. 이 과정에서 데이터 모델은 비즈니스의 정보 요구 사항을 기술적으로 표현하는 데 필요한 구조입니다. 데이터 모델링의 핵심 요소와 단계를 살펴보겠습니다. ✅ 모델링이 갖춰야 할 조건모델링은 현실 세계의 데이터를 정확하게 반영해야 하며, 데이터 간의 관계..
저번 글에 이어서 브루트포스 관련 추가적인 문제와 최적화에 관한 내용을 다루어 보겠습니다! 문제: 게임판 덮기H X W 크기의 게임판에서, 모든 흰 칸을 L자 모양의 블록으로 덮는 방법을 찾는 문제입니다. 블록은 회전 가능하지만, 겹치거나 검은 칸을 덮거나 게임판 밖으로 나갈 수는 없습니다.프로그램은 2초 안에 실행되어야 하며, 64MB 이하의 메모리를 사용해야 합니다! 입력은 테스트 케이스 수 $C$($C$≤$30$), 또한 각 테스트 케이스마다 두 정수 $H$, $W$($1$≤$H$, $W$≤$20$)와 $H\times T$ 크기의 게임판(흰 칸의 수는 최대 50)으로 구성됩니다.게임판을 구성할 때 검은 칸은 '#', 흰 칸은 '.'으로 표시됩니다.33 7#.....##.....###...##3 7#..
이번 글부터는 여러 알고리즘 패러다임을 다뤄보며 알고리즘 문제에서 어떤 식으로 이 패러다임을 사용하는지 알아보도록 하겠습니다.브루트포스 알고리즘에 대한 접근법이나 더 많은 문제를 원하시면 하단 포스팅을 보셔도 도움이 될 것 같습니다! 👍🏻 꼭 알아야하는 코딩 테스트 유형: 7) #Bruteforcing이번에는 코딩 테스트에서 중요한 유형인 'Brute Forcing(브루트포스)'에 대해 알아보겠습니다. 브루트포스는 가능한 모든 경우의 수를 탐색하여 정답을 찾는 방법입니다. 즉, 모든 가능성을 일일이injoycode.tistory.com 개요프로그래밍 대회에서 참가자들은 종종 복잡하고도 우아한 해결책을 찾으려 하지만, 실제로는 더 간단하고 명확한 방법이 존재할 때가 많습니다.이러한 상황에서 '완전 탐색..
이번 글에서는 알고리즘 증명에 자주 사용되는 기법들, 또 그 증명의 일반적인 패턴들을 다뤄볼까 합니다!수학적 귀납법과 반복문 불변식 수학적 귀납법은 반복적 구조를 가진 명제들을 증명하는 데 유용한 방법으로, 단계별로 문제를 나누어 각 단계에서의 성립을 증명합니다. 예를 들어, 도미노가 하나씩 쓰러지는 것처럼, 첫 단계가 성립하고, 한 단계가 성립하면 다음 단계도 성립한다는 것을 보임으로써 전체가 성립함을 증명합니다. 추가적으로 반복문 불변식 또한 알고리즘의 정당성을 증명하는 데 유용합니다. 알고리즘 내의 반복문이 올바른 결과를 내기 위해 각 단계에서 특정 조건이 계속해서 유지되어야 함을 의미합니다. 이를 증명하기 위해 반복문 시작 시, 반복문 내에서, 그리고 반복문 종료 시에 불변식이 성립함을 보여야 합..
저번 글에 이어서 시간 복잡도와 관련된 빅 오 표기법(big-O notation), 주먹구구 법칙, NP 문제 등을 다뤄보겠습니다. 시간 복잡도지난 글을 돌이켜보면 알고리즘을 평가할 때 중요한 지표 중 하나는 바로 '시간 복잡도'였습니다. 이 시간 복잡도는 알고리즘이 얼마나 효율적으로 실행되는지를 나타내는 척도로, 알고리즘이 수행하는 기본 연산의 총 횟수를 입력 크기에 따라 나타낸 것입니다. 기본 연산은 더 이상 쪼갤 수 없는 최소 단위의 연산으로, 예를 들어 정수의 사칙연산, 변수 간의 대입, 논리 연산 등이 이에 해당합니다. 이와 달리 배열 정렬, 문자열 비교, 소인수 분해 같은 연산들은 여러 기본 연산을 포함하므로 기본 연산으로 분류되지 않습니다. 시간 복잡도의 핵심은 알고리즘 내부의 '가장 깊이..
알고리즘 공부를 시작하면서 읽었던 ⟪ 프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략 ⟫ 시리즈에 대한 내용을 정리해보려고 합니다! 책에는 C++ 코드를 위주로 설명하고 있지만, 제가 현재 코딩 테스트나 대회에서 사용하는 파이썬 코드로 따로 정리하고 싶었습니다.먼저 시간 복잡도 분석에 대한 부분입니다. 개요알고리즘의 속도를 효과적으로 측정하는 것은 더 빠른 알고리즘을 개발하는 데 필수적입니다.가장 간단한 방법은 두 알고리즘을 구현하여 동일한 입력에 대한 실행 시간을 비교하는 것이지만, 알고리즘의 효율성을 평가하는 일반적인 기준으로는 부족할 수 있습니다.실행 시간은 다양한 외부 요인에 영향을 받기도 하고, 같은 알고리즘이라도 입력의 크기나 특성에 따라 수행 시간이 달라질 수 있습니다. 알고리즘의 수행 ..