본문 바로가기

전체 글262

[알고리즘 문제] 백준14502 - 연구소 www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크� www.acmicpc.net 문제는 완전탐색과 bfs로 풀었습니다. 처음 bfs대신 dfs로 풀어보려고했는데 bfs로 푸는게 더 적절한 문제였습니다. 그렇게 간단한 문제같지는 않습니다. 완전탐색으로(재귀) 벽을 세우고, 벽을 3개까지 세웠을 때 바이러스를 퍼뜨려보았습니다(bfs). 그리고 안전구역을 계산해 계속 갱신해 주는 방법으로 문제를 풀었습니다. 처음 바이러스를 퍼뜨릴 때 2중 for문안에서 map[y][x]==2 일때 bfs를 구현했습니다. .. 2020. 9. 2.
[알고리즘문제] 프로그래머스 - 스킬트리 스킬의 순서가 주어지고, 스킬들이 주어졌을 때 스킬순서를 만족하는 스킬이 몇개 있는지 검사하는 문제입니다. 데이터 크기가 크지 않아서 3중 for문으로 풀었고, 각 스킬마다 스킬순서와 같은 알파벳을 temp에 모두 더했습니다. 그리고 temp와 스킬순서를 비교하면서 알파벳이 모두 같으면 answer++을 해주었습니다. #include #include using namespace std; int solution(string skill, vector skill_trees) { int answer = 0; for(string s:skill_trees){ string temp=""; for(int j=0;j 2020. 9. 1.
[데이터베이스] 트랜잭션(Transaction) 이번시간에는 트랜잭션에 대해 공부해 보겠습니다. 트랜잭션이란 데이터베이스를 조작하는 하나의 논리적인 작업단위를 구성하는 연산들의 집합를 의미하며 이 작업들은 모두 실행되거나, 모두 실행되지 않아야 합니다. 또한 트랜잭션은 병행제어(동시제어)와 회복의 논리적 단위입니다. 여기서 데이터베이스를 조작한다는 의미는 쿼리문을 이용하여 데이터베이스의 데이터를 조회,삭제,수정,삽입하는 일을 의미합니다. 또한 이런 작업은 여러 쿼리문을 포함할 수 있으며 이 모든 것들이 모두 성공적으로 실행되거나, 오류가 생긴 경우 모두 실행되지 말아야 합니다. 트랜잭션의 예로 많이 참고하는 입/출금으로 설명해 보겠습니다. A가 B에게 10000원을 이체해서 보낸다고 하겠습니다. 이 경우 "A의 계좌에서 10000원 출금, B의 계좌에.. 2020. 9. 1.
[데이터베이스] 정규화(Normalization) 이번 시간에는 데이터베이스 정규화에 대해 공부해 보겠습니다. 정규화란 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 의미합니다. 또한 데이터베이스 이상현상을 없애고 크고, 제대로 조직되지 않은 테이블들과 관계들을 작고 잘 조족된 테이블과 관계들로 나눈것을 포함합니다. 쉽게 말해서 데이터 중복에 의한 이상현상을 해소하는 과정을 의미합니다. 정규화에는 1정규형(1NF), 2정규형(2NF), 3정규형(3NF), BCNF(Boyce-Codd Normal Form), 4정규형(4NF), 5정규화(5NF)가 주로 실무에서 사용되며 그 이외의 경우는 주로 연구용으로 사용됩니다. 1 정규형(1NF) : 모든 속성을 반드시 하나의 원자값만 가져야 한다 위의 경우 취미는 반복그룹(취미1,취.. 2020. 8. 31.
[데이터베이스] 이상(Anomaly) 이번시간에는 데이터베이스 이상에 대해 공부해 보겠습니다. 이상이란 릴레이션에서 일부 속성들의 종속이나 데이터의 중복으로 인해 데이터 조작시 불일일치가 발생하는 것을 말합니다. 즉, 테이블을 설계할 때 잘못 설계하여 데이터를 삭제,수정,삽입할 때 논리적으로 오류가 생기는 것을 말합니다. 대부분 이상현상이 발생하는 데이터의 중복성때문인데 이를 제거하는 과정이 정규화 입니다. 이상의 종류에는 삽입이상, 삭제이상, 갱신이상이 있습니다. 1. 삽입 이상 : 자료를 삽입할 때 의도하지 않은 자료까지 삽입해야만 자료를 테이블에 추가가 가능한 현상입니다. 강의를 아직 수강하지 않은 새로운 학생을 삽입할 경우 강의코드 속성에는 null값이 들어가야 하는 문제가 생깁니다. 2. 갱신 이상 : 중복된 데이터 중 일부만 수정.. 2020. 8. 31.
[데이터베이스] 인덱스(index) 사실 많은 데이터를 다룰일이 없어서 인덱스에 대해 크게 신경쓰지 않았는데, 이번에 공부를 하고 나서 인덱스가 굉장히 강력한 기능을 한다는 것을 알았습니다. 거의 필수적인 개념이죠. 이번시간에는 인덱스가 무엇인지 또 어떻게 사용하는지에 대해 공부해 보겠습니다. 인덱스 인덱스라는 개념을 우리에게 친숙합니다. 우리가 책에서 원하는 내용을 찾을 때 처음부터 찾지않고 책의 목차를 보고 내가 원하는 내용이 몇페이지에 있는지 확인하고 그 페이지로 바로가죠 ? 이런 개념이 인덱스 입니다. 책 속의 내용 중에서 중요한 단어나 항목 등을 쉽게 찾아볼 수 있도록 일정한 순서에 따라 별도로 배열하여 놓은 목록. 데이터베이스에 수많은 데이터가 저장되어 있고 "x"라는 데이터를 찾기 위해 처음부터 하나씩 검사해야 한다면 아주 많.. 2020. 8. 28.
[알고리즘문제] 프로그래머스 - 튜플 사실 문제 자체가 좀 이해가 안갔다. 이해하고도 이걸 풀라고...?라는 생각이 들었다. 그래서 예제보고 풀었다. 처음에 next_permutation으로 풀 수 있지 않을까 라는 생각을 했다(지금 생각하면 바보같은 생각...). #include #include #include #include using namespace std; int comp(string s1, string s2) { return s1.length() {4,2,3},{3},{2,3,4,1},{2,3} int start .. 2020. 8. 27.
[알고리즘문제] 프로그래머스 - 크레인 인형뽑기 게임 일단 풀긴 풀었는데, 사소한거에서 실수를 했다. y축을 뒤집어서 입력받으려고 했는데, x,y변수 값을 잘못 세팅했고, 총 제거된 인형수를 구해야 하는데 총 제거된 횟수를 출력했다. 매번 문제를 꼼꼼하게 읽는다고 생각하는데 실수한다.. 문제 자체는 간단한 것 같다. 나는 y축을 뒤집어서 입력받았기 때문에 stack을 사용했는데 생각해보면 그냥 y축을 뒤집지 않고 que를 사용해도 될 것 같다. vector vec를 선언해놓고 각 열에 인형들을 넣어놓았다. 하나씩 꺼내면서 바구니에 넣기 전 안의 값과 비교해서 같으면 count++, top 제거해주고 아니면 그냥 넣었다. #include #include #include #include using namespace std; int solution(vector .. 2020. 8. 27.
[데이터베이스] SQL과 NoSQL 사실 SQL과 NoSQL를 처음들었을 때, SQL이 RDBMS를 의미하는 것 같은데 왜 SQL이라고하지..? RDBMS와 NoSQL이 더 어울리지 않나 ? 라는 생각을 했습니다. 그래서 곰곰히 생각해봤는데 SQL(Structured Query Language)은 RDBMS의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이기 때문에 그 자체적으로 관계DB의 의미를 내포하고 있다고 생각했습니다. 그리고 SQL과 NoSQL이 서로 개념적으로 상이한 부분이 있기 때문에 SQL와 NoSQL이라고 많이들 말하지 않아 생각합니다. 이번 게시글에서는 SQL와 NoSQL에 대해 간략하게 알아보고 이 둘의 차이점, 각각 언제 사용해야 하는지에 대한 부분 위주로 다루겠습니다. SQL SQL(관계DB)는 스키마가.. 2020. 8. 27.