(Java) 프로그래머스 - 우박수열 정적분
·
코딩 테스트
문제가 콜라츠 추측과 정적분이 같이 있어서 조금 읽기 어려웠다. 문제가 이해가 된다면 그리 어렵지 않은 문제였다. 인풋값이 작아서 시간 초과 걱정은 하지 않았고 완전 탐색으로 모든 넓이의 조합을 다 만들어 둘까 생각하다 너무 비효율적인 것 같아 배열을 돌면서 바로바로 넓이를 구했다. 로직 k가 1이 될때까지 나머지 숫자를 구하고 list에 추가한다. 그리고 정적분을 진행하면 되는데, 먼저 정적분의 범위를 구하고 시작 값이 끝 값보다 크다면 answer 배열에 -1을 추가하고 넘어간다. 시작 값이 끝 값보다 작다면 x의 크기를 1로 고정하고 사다리꼴의 넓이를 구하고 이를 sum에 추가한다. 사다리꼴의 넓이는 (윗변 + 아랫변) x 높이 / 2인데, 여기서 높이는 1로 고정되어 있으므로 (윗변 + 아랫변) ..
[데이터베이스 개론] Chapter 12 - 데이터베이스 응용 기술
·
Database
객체지향 데이터베이스 관계 데이터베이스는 관계 데이터 모델의 기능적 제약조건과 SQL의 표현력의 한계로 인해 다양한 응용 분야에 부적합하다는 문제가 제기되었다. 따라서 관계 데이터베이스와 다른 형태의 데이터베이스들이 연구되었는데 그중 하나가 객체지향 데이터 모델이다. 객체지향 데이터베이스의 데이터 모델과 질의어는 표준화되지 못하여 한정적인 분야에서만 사용된다. 객체지향 데이터 모델 객체지향 데이터 모델은 객체지향 개념에 기반을 둔 데이터 모델이다. 객체지향 모델은 다양한 응용 분야의 데이터 모델링을 위한 새로운 요구 사항을 지원하고, 의미상 관계가 있는 데이터베이스 구조를 표현하려고 할 때 강력한 설계 기능을 제공한다. 객체와 객체 식별자 객체는 현실 세계에 존재하는 개체를 추상적으로 표현한 것이다. 각..
[데이터베이스 개론] Chapter11 - 보안과 권한 관리
·
Database
보안 데이터베이스에 저장된 데이터는 여러 사용자들이 공유해서 사용하는 특성이 있다. 데이터베이스에 저장된 데이터를 보호하기 위해 인증, 인가된 사용자만 접근하게 하여 보안을 유지해야 한다. 물리적 환경에 대한 보안 자연재해처럼 데이터베이스에 물리적으로 손실을 발생시키는 위험으로부터 데이터베이스를 보호해야 한다. 권한 관리를 통한 보안 접근이 허락된 사용자만 부여된 권한 내에서 데이터베이스를 사용할 수 있도록 한다. 그러려면 계정이 발급된 사용자만 데이터베이스에 접근할 수 있도록 통제하고, 사용자별로 데이터베이스의 사용 범위와 수행 가능한 작업 내용을 제한할 수 있어야 한다. 운영관리를 통한 보안 접근이 허락된 사용자가 부여된 권한 내에서 데이터베이스를 사용하더라도 실수 등의 이유로 데이터 무결성을 위반할..
[데이터베이스 개론] Chapter10 - 회복과 병행 제어
·
Database
트랜잭션 데이터베이스는 다수의 사용자가 동시에 사용하더라도 항상 정확한 데이터를 유지해야 한다. 또한 데이터베이스의 장애가 발생하더라도 빠른 시간 내에 원래의 상태로 복구할 수 있어야 한다. 트랜잭션의 개념 DBMS는 항상 데이터베이스가 정확하고 일관된 상태를 유지할 수 있도록 다양한 기능을 제공하는데 그중 하나가 트랜잭션이다. 트랜잭션은 작업 하나를 수행하는데 필요한 데이터베이스의 연산을 모아놓은 것이다. 이는 데이터베이스의 논리적 작업의 단위가 되며, 데이터베이스에 장애가 발생했을 때 데이터를 복구하는 작업의 단위도 된다. 하나의 트랜잭션으로 묶인 작업은 중간에 장애가 발생하더라도, 시스템이 복구되었을 때 나머지 작업을 실행하거나 이전의 작업을 취소해서 이전 상태로 되돌아가게 해야 한다. 일반적으로 ..
[데이터베이스 개론] Chapter9 - 정규화
·
Database
정규화의 개념과 이상 현상 정규화의 개념 정규화는 데이터베이스를 설계한 후 설계 결과물을 검증하기 위해 사용한다. 정규화는 이상현상을 제거하면서 데이터베이스를 올바르게 설계해 나간다. 이상현상의 종류 삽입 이상 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제 갱신 이상 중복 투플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제 삭제 이상 투플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제 정규화의 필요성 이러한 이상현상이 발생하는 이유는 관련이 없는 속성들을 하나의 릴레이션에 모아두고 있기 때문이다. 따라서 관련 있는 속성들로만 릴레이션을 구성해야 하는데 이때 정규화를 사용한다. 정규화는 이상현상이 발생하지 않도록 릴레이션을 분해하는 과정이다. 정규화를 ..
[데이터베이스 개론] Chapter8 - 데이터베이스 설계
·
Database
데이터베이스 설계 단계 조직 구성원들의 다양한 요구에 알맞은 데이터베이스를 구축하기 위해서는 데이터베이스 설계가 중요하다. 관계 데이터 모델을 기반으로 두고 데이터베이스를 설계할 때는 E-R 모델과 릴레이션 변환 규칙을 이용한 설계 방법과 정규화를 이용한 설계 방법을 사용한다. 요구사항 분석 요구사항 분석 단계에서는 데이터베이스에 대한 사용자들의 요구 사항을 수집하고 분석하여, 개발할 데이터베이스의 용도를 명확히 파악하는 것이 목적이다. 요구 사항 분석 단계는 사용자가 요구하는 데이터베이스의 용도가 결정되는 단계이기 때문에 품질 좋은 데이터베이스를 개발하기 위해 가장 중요한 단계이다. 데이터베이스를 사용할 주요 사용자의 범위부터 결정한다. 사용자가 조직에서 수행하는 업무를 분석한다. 수집된 요구 사항을 ..
[데이터베이스 개론] Chapter7 - 데이터베이스 언어 SQL
·
Database
SQL의 소개 SQL(Structured Query Language)은 관계 데이터를 위한 표준 질의어로 사용한다. SQL은 원하는 데이터가 무엇인지만 말하기 때문에 비절차적 데이터 언어의 특성을 띤다. SQL은 SEQUEL(Structured English QUEry Language) 에서 유래했으며 1986년 ANSI와 ISO에서 SQL을 관계 데이터베이스의 표준 질의어로 채택하고 표준화 작업을 진행하였다. 이후로 계속 개정을 거쳐 SQL:2022까지 발표되었다. SQL은 DBMS에 직접 접근하여 사용하거나 응용 프로그램에 삽입하여 사용할 수도 있다. SQL을 이용한 데이터 정의 테이블의 생성 CREATE TABLE 테이블_이름 ( 속성_이름 데이터_타입 [NOT NULL] [DEFAULT 기본_값]..
(Java) 프로그래머스 - 연속된 부분 수열의 합
·
코딩 테스트
문제를 읽고 완전 탐색은 인풋값이 크기 때문에 당연히 시간 초과가 난다고 생각해서 배제했다. 부분 수열 문제에서 O(N) 로직을 가지는 건 투포인터와 슬라이딩 윈도우인데, 이번 문제는 정렬되어 있고, 부분 수열의 길이가 가변적이니 투포인터를 사용했고 문제 조건에 맞게 저번 카카오 문제에서 썼던 Comparator를 사용하여 정렬하고 값을 리턴했다. 오랜만에 투포인터를 써서 더듬거리며 풀었지만 꽤 재미있었다. 최종 코드 import java.util.*; class Solution { public int[] solution(int[] sequence, int k) { int[] answer = new int[2]; List list = new ArrayList(); int start = 0; int end..
(Java) 프로그래머스 - 이모티콘 할인행사
·
코딩 테스트
문제를 읽고 대략적인 로직은 빠르게 세워졌지만 구현에는 꽤 많은 시간이 소요되었다. 인풋 값이 크지 않아서 시간 초과는 생각하지 않고 풀었다. 먼저 가능한 할인 조합을 만들고 users 배열과 emoticons 배열을 순회하며 계산후 result 배열에 담고 정렬해주었다. 총 1시간 정도 걸렸는데 풀이 시간을 더 빠르게 하고 싶다... 최종 코드 import java.util.*; class Solution { static List list; static int[] dis = new int[] {10,20,30,40}; public int[] solution(int[][] users, int[] emoticons) { int[] answer = new int[2]; list = new ArrayList(..