book541의 등록된 링크

 book541로 등록된 네이버 블로그 포스트 수는 87건입니다.

[알고리즘] 플로이드 와샬(Floyd Warshall) 알고리즘 정리 [내부링크]

0. 플로이드 와샬(Floyd-Warshall) 알고리즘이란? 플로이드 와샬 알고리즘(Floyd Warshall Algorithm)은 가중 그래프 (Weighted Graph)에서 발생하는 모든 경로에 대한 최단 경로를 찾는 알고리즘입니다. 다익스트라와 다르게 음의 가중치를 갖는 간선(Edge) 가 있어도 최단 경로 탐색이 가능하지만, 음의 사이클이 발생하는 경우에는 최단 경로를 탐색할 수 없습니다. 플로이드 와샬 알고리즘의 경우 dynamic programming(동적 계획법) 기법을 사용해서 구현하며, 시간 복잡도의 경우 그래프의 노드 개수가 N 개라고 가정했을 때, O(N^3)의 시간 복잡도를 갖습니다. 플로이드 와샬 알고리즘의 핵심 개념은 "이 정점을 거쳐가는 경우와 거쳐가지 않는 경우 중 어떤 경우가 더 최단 거리일까?"입니다. 1. 플로이드 와샬 알고리즘의 흐름 정리 아래 그래프를 예로 들어서 설명해 보도록 하겠습니다. 위 그래프에 따라 2차원 배열 형태로 각 출발점에서

[알고리즘] 위상 정렬 (Topology Sort) 정리 [내부링크]

0. 위상 정렬이란? 이번에 정리해 볼 알고리즘은 위상 정렬(topology sort)입니다. 위상 정렬은 선행 순서가 정해져있는 작업을 할 때, 이 순서를 위반하지 않고 작업을 처리하는 순서를 찾고 싶을 때 사용하는 알고리즘입니다. 위상 정렬은 DAG(Directed Acyclic Graph)에서만 적용할 수 있는데, 여기서 DAG란 사이클이 없는 방향이 있는 그래프를 의미합니다. 이는 그래프에서 사이클이 발생하는 경우 위상 정렬을 이용할 수 없기 때문입니다. 1. DAG(Directed Acyclic Graph) 예시들! 위와 같은 그래프를 DAG라고 할 수 있으며, 일반적으로 아래와 같은 실제 예시에 대입해서 해야 하는 일의 순서를 정하고 싶을 때 위상 정렬을 주로 사용합니다. 간단한 DAG 예시 2. 위상 정렬(Topology Sort)의 문제 해결 방식 진입 차수가 0인 정점을 큐(queue) 자료 구조에 삽입합니다. 순서는 상관없이 큐에 삽입한다. 큐에서 정점을 하나 가져

시간 복잡도(Time Complexity), 공간 복잡도(Space Complexity) [내부링크]

알고리즘 분석 동일한 작업을 수행하는 알고리즘이라 할지라도, 다른 성능을 갖게 될 수 있습니다. 따라서 알고리즘마다 평가를 하기 위한 기준이 필요한데, 그 기준으로 시간 복잡도(time complexity)와 공간 복잡도(space complexity)를 사용합니다. 이 복잡도가 낮을수록 좋은 알고리즘이라고 평가할 수 있습니다. 시간 복잡도(Time Complexity) 시간 복잡도는 알고리즘의 수행 시간을 평가하며, 점근적 표기법 중에서도 big O 표기법을 이용해 시간 복잡도를 표기합니다. 이 점근적 표기법은 연산의 횟수를 계산할 때, 불필요한 상수 계수 및 상수 항을 제거해서 표현하는 방법을 의미합니다. 알고리즘의 수행 시간은 실행 환경에 따라서 천차만별이기 때문에, 기본 연산(primitive operations)의 실행 횟수를 기준으로 평가하며, 기본 연산은 다음과 같습니다. 데이터 입출력 산술 연산 제어 연산 위의 3가지 연산을 수행한 횟수를 센 것을 기준으로 수행 시간을

백준 이분 탐색 (Binary Search) 알고리즘 문제 풀이 모음 [내부링크]

이번에는 몇 가지 이분 탐색 알고리즘을 이용해 풀이한 문제들을 정리해 보려 합니다. 이분 탐색에 대한 자세한 개념이 궁금하신 분들은 아래의 글을 먼저 읽으시면 도움이 될 것 같습니다!! [알고리즘] 이분 탐색 (Binary Search) 정리 및 lower_bound, upper_bound 함수 저장된 데이터를 탐색하는 방식에는 대표적으로 두 가지가 있습니다. 바로 순차 탐색(linear search)과 이... blog.naver.com 1. 2512번 예산 문제 2512번: 예산 2512번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 질문 검색 예산 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 128 MB 35983 12499 9215 33.753% 문제 국가의 역할 중 하나는 여러 지방의 예산요청을 심사하여 국가의 예산을 분배하는 것이다. 국가예산의 총액은 미리 정해져 있어서 모든 예산요청을 배정해 주기는 어려울 수도 있다. 그래서 정해진 총액 이하에서 가능

SQL 기본 문법 정리 (9) - Left, Right, Full JOIN [내부링크]

이번에는 지난 글에 이어서 나머지 JOIN 절(clause) 대해서 정리하도록 하겠습니다. ※ 지난 글 링크 ↓↓↓ https://blog.naver.com/book541/222783106409 SQL 기본 문법 정리 (8) - JOINS, Inner JOIN 1. SQL JOINS JOIN 절은 두 개 혹은 그 이상의 tables의 행을 연관된 column을 기반으로 합치... blog.naver.com 0. 간단한 지난 글의 내용 요약 지난 글에서도 정리한 바와 같이 JOIN clause(절)은 두 개 이상의 tables을 연관된 column(field)를 기준으로 결합하기 위해서 사용합니다. 지난번에 정리했던 Inner JOIN은 두 개의 table에서 동시에 일치하는 field 값을 갖는 records를 생성하기 위해서 사용하는 JOIN keyword입니다. ※ Three types of outer JOINS Left outer JOIN Right outer JOIN Full

Coursera 무료 DB + SQL 강좌 수강 후기 [내부링크]

오늘은 지난 일주일간 들었던 coursera 무료 강좌 수강 후기를 짧게나마 써보려고 합니다. 출처: Coursera Coursera를 원래도 알고 있었지만, 학기 중에 듣기가 조금 힘들어서 종강을 하자마자 평소에 공부하고 싶었던 database + sql 관련 무료 강좌가 없나 찾아보다가 이 강좌를 찾아서 듣게 되었습니다. Bancos de dados e SQL para Ciência de Dados IBM https://www.coursera.org/learn/sql-data-science-pt? Bancos de dados e SQL para Ciência de Dados IBM에서 제공합니다. Grande parte dos dados do mundo reside em bancos de dados. SQL (ou Structured Query Language) é uma linguagem poderosa usada para se ... 무료로 등록하십시오. www.courser

BaekJoon 1124번: 언더프라임, 에라토스테네스의 체 + 소인수 분해 [내부링크]

이번에는 백준 1124번 언더프라임 문제에 대해 정리해 보려고 합니다. 언더프라임이란 소인수분해를 했을 때 인수의 개수가 소수인 수를 지칭하는 단어이고, 주어진 범위 내의 언더프라임의 개수를 구하는 문제이기 때문에, 저는 에라토스테네스의 체 개념을 이용해 소수들을 구한 후 소인수 분해 알고리즘을 통해 인수의 개수를 파악하는 방식으로 구현했습니다. 문제 링크: https://www.acmicpc.net/problem/1124 1124번: 언더프라임 1124번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 질문 검색 언더프라임 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 3300 1229 934 39.560% 문제 자연수 X를 소인수분해하면, 곱해서 X가 되는 소수의 목록을 얻을 수 있다. 예를 들어, 12 = 2 × 2 × 3이다. 1은 소수가 아니다. 어떤 수 X를 소인수분해 해서 구한 소수의 목록의 길이가 소수이면, 그 수를 언더프라임 이라고 한다.

BaekJoon 1308번: D-Day, 날짜 계산하기 문제 [내부링크]

이번에는 구현 문제로 분류되는 1308번 문제를 정리해 보려고 합니다. 풀이 설명에 앞서 문제 소개부터 하겠습니다. 문제 링크는 다음과 같습니다! https://www.acmicpc.net/problem/1308 1308번: D-Day 1308번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 질문 검색 D-Day 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 2810 468 388 21.389% 문제 캠프에 오게 된 송유진은 캠프가 너무 지루해서 오늘로부터 캠프가 끝날 때 까지 며칠이나 남았는지 알아보고 싶었다. 그런데 캠프는 비상식적으로 길지도 몰라서 (윤년을 포함할지도 모른다) 손으로 하나하나 세기에는 힘들어 보였다. 더욱 정확한 계산을 위해, 유진이는 윤년이 정해지는 기준을 찾아보았고, 그것은 다음과 같았다. 서력기원 연수가 4로... www.acmicpc.net 문제 설명 캠프에 오게 된 송유진은 캠프가 너무 지루해서 오늘로부터 캠프가 끝날 때까지

[알고리즘] 합집합(Disjoint-Set) 찾기, Union-Find 알고리즘 [내부링크]

Union-Find(합집합 찾기) 알고리즘은 대표적인 그래프 알고리즘 중 하나로, 서로소 집합(Disjoin-Set)을 표현할 때 사용하는 알고리즘입니다. 그렇다면 Disjoint-Set 이란? Disjoint-Set, 서로소 집합은 공통 원소 없이 나누어진 원소들로 이루어진 부분 집합들에 대한 정보를 저장하고 조작하는 자료구조를 의미합니다. 이렇게 서로소 집합을 표현하기 위한 Union-Find 알고리즘을 구현하기 위해서는 큰 들에서 3가지의 기능을 구현해야 합니다. 초기화: parents 배열을 초기화 (모든 원소가 자기 자신을 부모로 갖도록 배열을 초기화) Union: 두 원소 x, y의 부분 집합을 결합하는 작업 (하나의 서로소 집합으로 합친다.) Find: 해당 원소의 부모를 찾는 작업 (같은 서로소 집합은 같은 부모를 갖는다.) 위와 같이 Disjoint Set 자료 구조를 표현하기 위해서 Union, Find 연산이 필요해서 Union-Find 알고리즘이라고도 불린다고

[자료구조] STL 연관 컨테이너 (set, multiset, map, multimap) 정리 [내부링크]

0. 연관 컨테이너란? key, value와 같이 관계있는 데이터를 묶어 하나의 쌍으로 저장하는 컨테이너를 의미합니다. 따라서 key와 value를 이용해 컨테이너 내부의 요소에 빠른 접근이 가능하지만, 연관 컨테이너는 자체적인 규칙에 따라 요소를 정렬하여 저장하기 때문에, 삽입되는 요소의 위치를 지정할 수는 없습니다. 연관 컨테이너는 주로 균형 이진 트리(balanced binary search tree) 또는 해시 함수(hash function)을 이용해서 구현합니다. 대부분의 자료에서 위와 같이 연관 컨테이너를 설명하고 있는데, 더 깊은 이해를 위해서 추후에 균형 이진 트리 및 해시 함수에 대해서도 정리해 보려고 합니다. 1. 연관 컨테이너 종류 C++의 STL에서 제공하는 연관 컨테이너 템플릿은 다음과 같이 총 4가지가 존재합니다. set multiset map multimap 2. set과 multiset set은 key 값 만을 요소로 컨테이너에 저장하는 연관 컨테이너입니

[알고리즘] 다익스트라(Dijkstra) 알고리즘, 최단 경로 탐색 알고리즘 [내부링크]

0. 다익스트라 알고리즘이란? 다익스트라 알고리즘(dijkstra algorithm)은 그래프 상에서 시작 노드를 기점으로 다른 노드로 가는 최단 경로를 탐색하는 대표적인 최단 경로(shortest path) 탐색 알고리즘입니다. 간단하게 말해서 다익스트라 알고리즘을 사용하면, 하나의 노드에서 그래프 내의 모든 노드로 가는 최단 경로를 구할 수 있습니다. 다만, 다익스트라 알고리즘을 사용해서 최단 경로를 탐색하기 위해서는 그래프 내에 음의 간선이 포함돼서는 안된다는 점을 유의해야 합니다! 1. 다익스트라 알고리즘 동작 과정 설명 (그림으로) 다음과 같은 그래프를 예로 들어보겠습니다. 1 2 3 4 5 6 0 시작 지점을 1번 노드라고 생각하고, 위 그래프에서 다익스트라 알고리즘을 따라 최단 경로를 찾아가는 방식으로 설명해 보도록 하겠습니다. 1번 노드를 우선 방문한 후에 인접한 노드인 2, 5번 노드에 대해서 최단 경로를 갱신해 줍니다. 1번 노드와 인접한 두 개의 노드는 아직 한

SQL 기본 문법 정리 (4) - DELETE, SELECT TOP [내부링크]

이번에는 DB의 table에서 특정 records를 삭제할 때 사용하는 DELETE 문에 대해 정리하도록 하겠습니다. DELETE 문의 주요 개념은 아래의 w3school 사이트를 참조했습니다. https://www.w3schools.com/sql/sql_delete.asp SQL DELETE Statement W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more. www.w3schools.com 1. The SQL DELTE Statement DELETE 문은 앞서 소개한 바와 같이 table에 존재하는 records를 삭제하기 위해서 사용하는 명령어입니다. 아래와 같은 문법에 따라서 사

SQL 기본 문법 정리 (5) - MIN, MAX, COUNT, AVG, SUM, SCALAR and String function [내부링크]

이번에는 데이터베이스 자체적으로 연산을 수행해서 특정한 값을 뽑아올 수 있는 다양한 SQL의 내장 함수에 대해서 정리해 보려고 합니다. 이러한 데이터베이스 내장 함수를 사용하는 경우 데이터베이스에서 특정 데이터셋을 추출한 다음에 연산 작업을 진행하는 것 보다 검색해야 하는 데이터의 양을 획기적으로 줄일 수 있기 때문에, 중요한 개념이라고 볼 수 있습니다. 1. MIN, MAX, COUNT, AVG, SUM functions MIN(): 선택된 column의 value 중에서 가장 작은 값을 return 하는 함수입니다. MAX(): 선택된 column의 value 중에서 가장 큰 값을 return 하는 함수입니다. COUNT(): 특정 기준에 부합하는 rows의 수(=records의 수)를 return 하는 함수입니다. AVG(): 수치 값을 갖는 column(=field)의 평균 값을 return 하는 함수입니다. SUM(): 수치 값을 갖는 column(=field)의 합을 re

SQL 기본 문법 정리 (6) - LIKE, Wildcards, IN [내부링크]

LIKE operators는 앞서 정리한 WHERE 절과 함께 사용되며, 특정 column(field)에서 특정 pattern을 찾기 위해서 사용하는 연산자입니다. LIKE와 함께 자주 사용하는 wildcards는 %, _ 두 가지가 있는데, 간략하게 설명하면 아래와 같습니다. percent sign (%)은 0, 1, 혹은 다수의 문자를 표현합니다. underscore sign(_)은 한 개의 문자를 표현합니다. 다시 말하면, %는 빈 공간부터 한 개 이상의 문자를 대체해서 사용하는 wild card이고, _는 한 개의 문자를 대체해서 사용하는 wild card라고 설명할 수 있을 것 같습니다. ※주의: 여기서 사용하는 wild card는 sql의 실행 환경에 따라서 다르게 사용됩니다. 1. SQL LIKE syntax SELECT column1, column2, ... FROM table_name WHERE column1 LIKE specific_pattern; 다시 LIKE 연

SQL 기본 문법 정리 (7) - BETWEEN, Aliases [내부링크]

이번에 정리할 BETWEEN 연산자는 주어진 범위 내의 values를 선택하는 작업을 수행합니다. 여기에서 values는 숫자, 문자, 날짜 같은 형태를 허용합니다. BETWEEN 연산자는 시작, 끝에 해당하는 값을 함께 명시해서 사용합니다. 1. BETWEEN Syntax select column_name(s) from table_name where column_name between begin_value and end_value; 2. Demo Database 다음과 같은 database를 활용해서 실습을 진행해 봤습니다. Demo datasets 3. BETWEEN Examples select * from Products where Price BETWEEN 10 AND 20; 위의 명령어는 Products table에서 Price field가 10에서 20 사이의 값을 갖는 records를 추출하는 명령어입니다. 명령어를 실행하게 되면, 아래와 같은 실행 결과를 얻을 수 있습니

SQL 기본 문법 정리 (8) - JOINS, Inner JOIN [내부링크]

1. SQL JOINS JOIN 절은 두 개 혹은 그 이상의 tables의 행을 연관된 column을 기반으로 합치기 위해 사용할 수 있습니다. 사진 출처: w3school.com SQL JOIN 절(clause)에는 여러 가지 유형이 있으며, 각 명령어는 다음과 같은 작업을 수행하고 싶은 경우에 사용합니다. 우선 JOIN은 아래와 같이 크게 두 가지 유형으로 분류할 수 있습니다. ※ Two types of join Inner JOIN Outer JOIN Inner JOIN은 조건을 만족하는 records만을 추출하는 작업을 수행하고, Outer JOIN은 조건을 만족하지 않더라도 외부의 일부 혹은 전체의 records를 추출하고 싶을때 사용하는 JOIN의 유형입니다. Outer JOIN의 경우 수행하는 작업의 종류에 따라서 세 가지로 나뉘게 되는데, 이는 아래와 같습니다. ※ Three types of outer join Left (OUTER) JOIN Rgith(OUTER) JO

[MySQL] CSV 파일 MySQL에서 import 해보기 [내부링크]

이번에는 직접 .csv 파일을 만들어 MySQL workbench에서 import 하는 간단한 실습을 진행한 내용을 정리해 보려 합니다. 이번 정리 글은 Coursera에서 Database 관련 수업을 듣던 중 직접 csv 파일을 만들어 실습을 진행해보다 정리하면 좋을 것 같아서 작성하게 되었습니다. 제가 듣고 있는 강의 링크는 하단의 Reference란에 남겨 놓도록 하겠습니다. 저는 간단하게 naver의 스포츠뉴스 국내축구란에서 k리그 1 소속 팀에 대한 정보를 정리해서 다음과 같이 .csv 파일을 만들어 봤습니다. 1. csv 파일 생성하기 출처: naver 스포츠뉴스 국내 축구란 .csv 파일은 Excel을 이용해서 작성했고, 스프레드시트의 최상단 행에는 field name 정보를 작성해서, csv file을 import할 시에 field name을 바로 지정할 수 있도록 작성했습니다. Fields로는 각 팀을 구별하기 위한 고유 값인 Team ID, 팀명, 홈, 국가, 현재

[알고리즘] DFS(Depth First Search), 깊이 우선 탐색 방식 [내부링크]

정리 순서 그래프란? DFS(Depth First Search)에 대해서 DFS를 구현하는 방법 Reference DFS와 유사한 BFS에 대한 정리 글 링크입니다! https://blog.naver.com/book541/222753851346 [알고리즘] BFS(Breadth-First Search), 너비 우선 탐색 방식 DFS(Depth First Search)에 대해서 정리한 지난 글에 이어서 이번에는 또 하나의 대표적인 그래프 탐... blog.naver.com 1. 그래프란? DFS와 BFS는 그래프 상을 탐색하는 방법에 대한 개념입니다. 따라서 DFS, BFS를 설명하기에 앞서 그래프에 대해서 간략하게 정리해보려 합니다. 그래프는 정점과 간선으로 이루어진 자료 구조로, 정점은 그래프를 이루는 하나하나의 지점들을 간선은 이러한 정점들의 연결 관계를 표현하는 것을 의미합니다. 위와 같은 그림도 그래프의 일종입니다. 그렇기에 1, 2, 3, 4이라는 값을 갖는 정점 4개와 1

[알고리즘] BFS(Breadth-First Search), 너비 우선 탐색 방식 [내부링크]

DFS(Depth First Search)에 대해서 정리한 지난 글에 이어서 이번에는 또 하나의 대표적인 그래프 탐색 방법 중 하나인 BFS(Breadth First Search)에 대해서 정리해 보도록 하겠습니다. <지난 DFS 정리 글 링크> [알고리즘] DFS(Depth First Search), 깊이 우선 탐색 방식 1. 그래프란? DFS와 BFS는 그래프 상을 탐색하는 방법에 대한 개념입니다. 따라서 DFS, BFS를 ... blog.naver.com 0. 정리 순서 BFS(Breadth-First Search)란? BFS 간단한 구현 방법 큐(queue) 자료구조란? BFS source code 풀이해 볼 만한 문제 Reference BFS란? 너비 우선 탐색(Breadth-first search, BFS)는 맹목적 탐색 방법 중 하나로 시작 정점(vertex)을 방문한 후 인접한 모든 정점들을 우선으로 방문하는 방법입니다. 더 이상 방문하지 않은 정점이 없을 때까지 방

데이터베이스(Database, DB)와 SQL 개념 정리 [내부링크]

이번 글에서는 데이터베이스(Database, DB)와 SQL(Structured Query Language)에 대한 개념을 기초부터 정리해 보도록 하겠습니다. 1. DB란? 다양한 DB software 데이터베이스(Database, DB)는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다. 작성된 목록으로써 여러 응용 시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음이다. 출처: 위키백과 데이터베이스 정리 이러한 데이터베이스의 가장 핵심적인 기능은 'CRUD'입니다. C는 생성(Create), R은 조회(Read), U는 갱신(Update), D는 삭제(Delete)를 의미합니다. 데이터베이스의 특징 실시간 접근성 (Real-Time Accessibility): 수시적이고 비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야 한다. 계속적인 변화 (Continuous Evolution): 새로운 데이터의 삽입, 삭

SQL 기본 문법 정리 (0) - SELECT, SELECT distinct [내부링크]

이번 글에서는 SQL(Structured Query Language)의 기초 문법 몇 가지를 공부하면서 정리하도록 하겠습니다. 앞으로 SQL 개념은 w3school 사이트를 주로 참고해 정리할 예정입니다. 링크는 아래에 첨부한 바와 같습니다. https://www.w3schools.com/sql/default.asp SQL Tutorial W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more. www.w3schools.com 아래의 링크로 접속하면 SQL 명령어를 사용해 볼 수 있습니다. https://www.w3schools.com/sql/trysql.asp?filename=trysql_

SQL 기본 문법 정리 (1) - WHERE, AND, OR, NOT [내부링크]

지난번에 정리한 select 문에 이어서, 기본적인 SQL 문법에 대해서 정리해 보도록 하겠습니다. https://blog.naver.com/book541/222761606056 SQL 기본 문법 정리 (0) - SELECT, SELECT distinct 이번 글에서는 SQL(Structured Query Language)의 기초 문법 몇 가지를 공부하면서 정리하도록 하겠... blog.naver.com 1. SQL WHERE Clause where 절은 특정 조건을 만족하는 records를 추출하기 위해서 사용하는 명령어입니다. SELECT column1, column2, ... FROM table_name WHERE condition; 위와 같은 형식으로 select 문과 함께 사용할 수 있습니다. 또한 where 절은 SELECT뿐만 아니라 UPDATE, DELETE 문과 함께도 사용할 수 있다고 합니다. https://www.w3schools.com/sql/trysql.asp

SQL 기본 문법 정리 (2) - ORDER BY [내부링크]

이번에는 결과 table을 특정 column(fields) 기준으로 정렬하고 싶을 때 사용하는 ORDER BY keyword에 대해 정리하도록 하겠습니다. 1. SQL ORDER BY keyword ORDER BY는 결과 database를 오름차순 또는 내림차순으로 정렬하기 위해서 사용되는 keyword입니다. default로 사용 시 오름차순으로 records를 정렬하며, 내림차순으로 정렬하기 위해서는 DESC keyword를 사용해야 한다고 합니다. 2. ORDER BY syntax SELECT column1, column2, .... FROM table_name ORDER BY column1, column2, ... (ASC or DSEC); 위의 문법 사용 예시와 같이 여러 개의 column(fields)에 대해서 정렬하도록 명령어를 만들 수 있습니다. 사용한 데이터베이스, 출처: w3school.com 3. SQL ORDER BY examples ex) default opt

SQL 기본 문법 정리 (3) - INSERT INTO, UPDATE [내부링크]

1. The SQL INSERT INTO Statement INSERT INTO는 table에 새로운 records를 추가하기 위해 사용하는 명령어입니다. 2. INSERT INTO Syntax 2가지 방식으로 INSERT INTO 사용할 수 있습니다. ① 추가될 records의 column 이름과 값을 명시하여 추가하는 방식 INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); ② 모든 column에 대해 record를 추가하고 싶은 경우에는 column을 일일이 명시할 필요가 없다. 하지만, 이렇게 사용하는 경우 table 내의 column의 순서를 맞춰서 record의 정보를 명시해서 추가해야 한다. INSERT INTO table_name VALUES (value1, value2, value3, ...); 이번에도 지난 글에서 사용한 w3school 사이트에서 아래의 데모 데이터 셋을 이용한

BaekJoon 1041번: 주사위 문제, Greedy Algorithm(탐욕법) 문제 풀이 [내부링크]

문제 설명: 주사위의 평면도 주사위는 위와 같이 생겼다. 주사위의 여섯 면에는 수가 쓰여 있다. 위의 전개도를 수가 밖으로 나오게 접는다. A, B, C, D, E, F에 쓰여 있는 수가 주어진다. 지민이는 현재 동일한 주사위를 N3개 가지고 있다. 이 주사위를 적절히 회전시키고 쌓아서, N × N × N 크기의 정육면체를 만들려고 한다. 이 정육면체는 탁자 위에 있으므로, 5개의 면만 보인다. N과 주사위에 쓰여 있는 수가 주어질 때, 보이는 5개의 면에 쓰여 있는 수의 합의 최솟값을 출력하는 프로그램을 작성하시오. 이 문제는 Greedy alrogithm 방식을 적용해서 풀어야 했습니다. 한 마디로 규칙을 찾아서 전부 해봐야 풀 수 있는 문제였습니다. 처음에는 문제가 주사위들을 합쳐서 큰 주사위를 만드는 것으로 알았으나, 풀다 보니 이상함을 느끼고 문제를 다시 읽어보니 노출된 면의 모든 수를 합해서 최소가 되는 경우의 모든 눈의 수 합을 구하는 문제였습니다. 주사위를 보면 알

Git terminal에서 사용할 수 있는 명령어 [내부링크]

이번 글에는 제가 git을 사용하면서 자주 쓰지만, 헷갈리는 명령어를 정리해 보도록 하겠습니다. Git이란 분산 버전 관리 시스템 중 하나로 최근 많은 개발자들이 사용하고 있는 중요한 프로그램입니다! 아래의 링크는 제가 이전에 git과 github에 대해서 간략하게 정리한 글 입니다! Git과 GitHub에 대한 간략한 정리 학교 과제를 하는 김에 Git의 개념에 대해서 정리를 하고 싶어서 간략하게 Git에 대해서 조사한 내용 + ... blog.naver.com 1. 초반 git 환경 설정 apt-get install git-core git 설치 git config --global user.name "username" 계정 이름 등록 git config --global user.email "email" 이메일 주소 등록 git config --global color.ui "auto" git의 출력 결과 색상 활성화 global option을 제거하면 repository마다 사용자

[알고리즘] Dynamic programming(동적 계획법) 이란? [내부링크]

Dynamic programming(동적 계획법)이란? 수학과 컴퓨터 과학, 그리고 경제학에서 동적 계획법이란 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법을 말한다. 이것은 부분 문제(sub problem) 반복과 최적 부분 구조(optimal sub structure)를 가지고 있는 알고리즘을 일반적인 방법에 비해 더욱 적은 시간 내에 풀 때 사용한다. 앞선 설명과 같이 Dynamic programming, 줄여서 DP 기법은 어떠한 문제를 풀 때, 해당 문제를 더 작은 부분 문제로 쪼갤 수 있는 경우, 그리고 최적 부분 구조의 형태를 갖는 경우에 문제를 더욱 효율적으로 해결할 수 있는 방법입니다. 부분 문제와 최적 부분 구조에 대한 조금 자세한 설명은 아래에서 하도록 하겠습니다. Dynamic programming의 핵심 아이디어 문제를 더 작은 문제로 쪼개는 과정에서 중복되는 부분 문제들이 등장하게 되는데, 이를 매번 계산하는 것이 아니라 처음 계산할 당시에 메

[알고리즘] Knapsack Problem(배낭 문제) 풀이 방식 및 1535번 풀이 [내부링크]

이번에는 Dynamic programming 기법을 적용하여 풀 수 있는 대표적인 문제인 배낭 문제(Knapsack problem)을 푸는 방법에 대해서 정리하도록 하겠습니다. 일단 Knapsack problem에는 두 가지가 있습니다. 1. Fractional Knapsack problem 2. 0-1 Knapsack problem 이 배낭 문제는 도둑이 배낭에 담을 수 있는 물건의 무게에 한계가 있는 상황에서 각 물건마다 가치가 다를 때, 훔칠 수 있는 물건의 가치가 최대가 되도록 물건을 훔치는 경우를 구하는 문제 같은 유형의 문제들에 해당됩니다. 그렇다면, Fractional, 0-1 knapsack problem은 각각 무엇을 의미할까요? Fractional은 물건을 통째로 훔칠 필요 없이 물건을 일정 비율만큼만 훔칠 수 있는 경우의 배낭 문제를 0-1 문제는 각각의 물건을 훔치는 경우만 또는 훔칠 수 없는 경우만 있을 때의 배낭 문제를 의미합니다. 하나의 예를 들자면, fr

[개념 정리] 상속(Inheritance)과 다형성(Polymorphism)에 대해서 [내부링크]

지난번에 객체지향 프로그래밍에 대해서 정리하며, 상속과 다형성에 대해 언급한 포스팅이 있었습니다. 이번에는 상속과 다형성이라는 개념에 대해서 조금 더 자세하게 공부한 내용을 정리하도록 하겠습니다. [개념 정리] 객체 지향 프로그래밍 (Object Oriented Programming, OOP) 이란 이번에는 객체 지향 프로그래밍에 대해서 간단하게 정리해 보도록 하겠습니다. 머릿속으로는 잘 알 것 같으... blog.naver.com 우선 상속(Inheritance)은 Base class의 member(속성, method)를 Derived class가 그대로 물려받아 사용할 수 있게 되는 개념을 의미합니다. 예를 들어서 미리 정의된 A class를 B class가 상속받는 경우라면, class A가 B의 Base class가 되고 class B는 Derived class가 될 것입니다. 말로만으로는 와닿지 않기 때문에, C++ 언어를 이용한 예시를 통해 개념을 정리해 보도록 하겠습니다

Logistic Regression (로지스틱 회귀)에 대한 정리 [내부링크]

1. Logistic Regression(로지스틱 회귀)란 로지스틱 회귀는 영국의 통계학자인 D.R.Cox가 1958년에 제안한 확률 모델로서 독립 변수의 선형 결합을 이용하여 사건의 발생 가능성을 예측하는 데 사용되는 통계기법이다. 로지스틱 회귀는 일반적인 회귀 분석의 목표와 동일하게 종속 변수와 독립 변수 간의 관계를 구체적인 함수의 형태로 나타내어 향후 예측 모델에 사용한다는 점이다. 이는 독립 변수의 선형 결합으로 종속 변수를 설명한다는 관점에서 선형 분석과 유사하지만, 로지스틱 회귀는 선형 회귀 분석과는 다르게 종속 변수가 범주형 데이터(종류를 표현하는 데이터를 의미, 카테고리 데이터라고도 불린다고 한다.)를 대상으로 하며 입력 데이터가 주어졌을 때 해당 데이터의 결과가 특정 분류로 나뉘기 때문에 일종의 분류(classification) 기법으로도 볼 수 있다. 흔히 로지스틱 회귀는 종속 변수가 이항형 문제(유효한 범주가 두 개인 경우, label이 두 가지인 경우)를 해결

확률 이론 기초 (Basic Probability Theory) 및 용어 정리 2 [내부링크]

이번에는 지난 포스팅에 이어서 기본적인 확률 및 통계의 이론과 자주 등장하는 용어들에 대해서 정리하도록 하겠습니다. 글의 내용은 강의에서 배운 내용과 여러 자료들을 참고했습니다. 새로운 내용에 대한 정리에 앞서 지난번에 정리한 내용에 대해 간단하게 요약해 보겠습니다. 확률 이론 기초 (Basic Probability Theory) 및 용어 정리 1 통계(Statistic)는 정보로 전환되는 데이터를 통한 객관적인 의사 결정 과정과 관련된 학문입니다. Patte... blog.naver.com 1. Brief summary of previous post. 통계학은 정보로 전환되는 데이터를 통한 객관적인 의사 결정 과정과 관련된 학문으로, 불확실성을 수반하는 분류나 예측 작업을 수행하는 머신 러닝 분야에 있어서 핵심적인 학문이라고 할 수 있습니다. mean, variance, skewness, kurtosis 같은 다양한 차수에 대한 statistical parameter를 이용해서 데

Jetson Nano 다뤄보기 [내부링크]

이번에 학부 연구생들에게 교수님이 NVIDIA Jetson Nano 보드를 이용해서 자율 주행 RC카를 만드는 프로젝트를 과제로 주셔서 Jetson Nano에 대해 공부하는 과정을 정리해 보려 한다. 그동안 연구실 소속으로 아무것도 한 게 없었는데, 재밌게 해보려고 한다. 그래서 이거 들고 집까지 왔다. 지난 학기에 마이크로프로세서 수업도 듣지 않아서 라즈베리 파이조차 다뤄본 적이 없기 때문에 박사님이 기본부터 공부하는 방법에 대해서 설명해 주셨다. NVIDIA 공식 홈페이지 우선 NVIDIA 공식 홈페이지의 링크이다. NVIDIA Deep Learning Institute 및 트레이닝 솔루션 AI, 가속 컴퓨팅 및 가속화된 데이터 사이언스 분야의 핸즈온 교육을 제공합니다. www.nvidia.com 위 링크로 가서 조금 아래로 내려보면 Jetson Nano에서 AI 시작하기 위와 같이 NVIDIA에서 관련된 코스를 제공한다고 한다. Enroll Now를 누르면 일단 가입을 하라고

인천유나이티드 첫 직관 후기 [내부링크]

오늘은 K리그 7라운드 인천유나이티드 vs 울산 현대 경기를 직관하러 인천축구전용경기장에 다녀와서 후기겸 일기를 조금 써보려고 한다. 경기장 명칭이 숭의아레나로도 불리던데, 공식 명칭은 인천축구전용경기장인듯? 하다. 벌써 K리그 직관 두 번째다. 올해는 아마 직관 자주 다닐 것 같은데, 시간 여유만 되면 전북이나 포항, 울산, 대구 같은데 내려가서 여행 겸 직관도 해보고 싶다! 우리나라 조 쉬운건 아닌데, 일본 조 때문에 너무 좋다 ㅎ 전날 새벽까지 월드컵 조 추첨 보다가 늦게 잤는데, 일본 조 보고 설레서 새벽 4시까지 못잔듯? 일본조 뽑힐 때, 사실상 내 반응 일어나서 바로 준비하고 도원역으로 갔다. 역에서 사람들 따라서 바로 나가니까 경기장으로 이어지더라 인천축구전용경기장 인천광역시 중구 도원동 73 미리 티켓팅을 하고 가서 발권만 조금 기다리고 금방 들어갈 수 있었다! 보통 배경이 흐린데 티켓을 흐리게 찍었다. 솔직히 사람이 이렇게 많을 줄 몰랐는데, 아무래도 1, 2위 경기

Jetson Nano, Jetpack 설치하기 [내부링크]

일단 지난 번에 받아온 Jetson nano를 언박싱? 해줍니다. Jetson nano developer kit과 간단한 설명서가 들어있었습니다. Jetson nano developer kit 전면과 후면 사진 B01 version은 두 개의 CSI 카메라 포트를 갖고 있다고 하는데, 제가 받은 Jetson Nano에는 카메라 포트가 두 개 달려있어서 아마 B01 version developer kit인 것 같습니다. 총 4개의 USB port와 우측에는 이더넷 포트가 위치해 있습니다. 좌측에는 HDMI 포트와 전원 공급을 위한 배럴 전원 포트가 존재합니다. 이 뒷부분에는 마이크로 SD 카드가 삽입되는 것 같습니다. os 설치를 위해 필요한 sd카드와 카드 리더기 일단 컴퓨터 또는 노트북 상에서 마이크로 SD카드에 운영체제를 플래시 해줘야 하고, 설치가 완료된 이후에는 마이크로 SD 카드를 Jetson nano에 삽입해서 운영체제를 설치해줘야 합니다. 이제 Jetpack image와

Numpy basic 정리 [내부링크]

What is Numpy? Numpy는 python의 library 중 하나로 다차원 배열 객체와 이와 관련된 수학적 연산을 수행할 수 있는 다양한 함수들을 제공하는 library입니다. Numpy array는 Python의 list 객체와는 다르게 만들어지는 시점에서 사이즈가 고정되어야 하고, ndarray의 사이즈를 변화시키는 것은 기존의 array를 삭제하고 새로운 array를 만들어내는 것과 동일합니다. Numpy array 내의 모든 elements는 동일한 data type을 가져야 한다. 그렇기 때문에 모든 element는 메모리 상에서 동일한 크기를 갖습니다. 파이썬 내장 함수를 이용해서 할 수 있는 연산들을 보다 더 적은 코드와 더 효율적인 성능으로 수행할 수 있습니다. 이러한 연산들을 수행하기 위해서는 python의 list type 데이터를 우선 numpy array 형태로 변환해야 하고, 오늘날의 과학적/수학적 python-based software 사용하기 위

2022 카타르 월드컵 최종예선 대한민국 vs 이란전 직관 후기 [내부링크]

학교 도서관에서 몰래 한 컷 오늘은 대면 수업 때문에 학교에 갔다가 카타르 월드컵 최종예선 이란과 경기가 상암 월드컵 경기장에서 열려서 친구랑 둘이 직관을 다녀왔습니다! 직관은 2020년인가 FC 서울 K리그 경기를 가보긴 했는데, 이렇게 관중이 많은 경기는 처음 가는거라 등교할 때 부터 엄청 기대했다. 인터파크 모바일 티켓 첨 본다! 친구랑 이번에 이란전이 상암에서 열리길래 가까워서 한 번 직관 가보자 해서 난생처음으로 티켓팅을 했다. 서버가 시원하게 터져서 나는 실패하고 친구가 티켓팅에 성공해서 국가대표 경기 첫 직관을 다녀왔다! 한국-이란전 매진…서울월드컵경기장 역대 10번째 제가 그중에 한 명이에요 사람 엄청 많다 지난번에 FC 서울 경기 직관 왔을 때는 사람들 이거에 10분의 1? 정도밖에 없었는데, 오늘은 만원 관중이어서 그런지 사람 엄청 많았다. 8시 경긴데 한 7시 40분?에 들어가니까 이미 사람들이 꽉 차있어서 너무 웅장해서 한 컷 찍어주고 선수 입장까지 야무치게 찍

Git과 GitHub에 대한 간략한 정리 [내부링크]

학교 과제를 하는 김에 Git의 개념에 대해서 정리를 하고 싶어서 간략하게 Git에 대해서 조사한 내용 + 아는 내용을 정리해 보도록 하겠습니다! Git, 분산 버전 관리 시스템 (DVCS) Git 이란 여러 명의 사용자들 간에 파일 작업물들을 조율하기 위해 컴퓨터 파일의 변경 사항들을 추적하는 분산 버전 관리 시스템(DVSC, Distributed Version Control System or Decentralized Version Control System)입니다. Git의 경우 여러 명이 동시에 작업 가능한 병렬적인 개발을 가능하게 합니다. Branch를 통해 개발한 후에 본 프로그램에 merge 하는 방식을 통해 병렬 개발이 가능합니다. 분산 버전 관리 시스템이기 때문에, 인터넷에 연결되지 않은 환경(local 환경에서 개발한 한 후에 인터넷에 연결하게 merge 할 수 있기 때문입니다.)에서도 개발이 가능합니다. 또한 중앙 저장소가 날라간다 하더라도 원상 복구가 가능한 장점

[자료 구조] Heap 구조란? [내부링크]

힙(Heap)은 최댓값 및 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안된 완전이진트리(complete binary tree)를 기본으로 한 자료 구조(tree-based structure)로서 다음과 같은 힙 속성(property)를 만족한다. 힙 속성 (Heap property) node A가 node B의 부모 노드(parent node)이면, A의 키(key) 값과 B의 키값 사이에는 대소 관계가 성립한다. (이 대소 관계는 힙의 종류에 따라 다릅니다!) 힙의 종류 - 최대 힙(max heap): 부모 노드의 키값이 자식 노드의 키값보다 항상 큰 heap을 최대 힙(max heap)이라고 한다. - 최소 힙(min heap): 부모 노드의 키값이 자식 노드의 키값보다 항상 작은 heap을 최소 힙(min heap)이라고 한다. 여러 개의 값들 중에서 최댓값 or 최솟값을 빠르게 찾아내기 위해서 만들어진 자료구조입니다. 최대 힙은 tree의 root가 배열 내의 최댓값을

BaekJoon 1052번: 물병, 그리디 알고리즘(Greedy algorithm) 문제 [내부링크]

이번에는 BOJ 1052번 물병 문제를 C++ 언어를 이용해서 풀이해 봤습니다. 문제 설명 지민이는 N개의 물병을 가지고 있다. 각 물병에는 물을 무한대로 부을 수 있다. 처음에 모든 물병에는 물이 1리터씩 들어있다. 지민이는 이 물병을 또 다른 장소로 옮기려고 한다. 지민이는 한 번에 K개의 물병을 옮길 수 있다. 하지만, 지민이는 물을 낭비하기는 싫고, 이동을 한 번보다 많이 하기는 싫다. 따라서, 지민이는 물병의 물을 적절히 재분배해서, K개를 넘지 않는 비어있지 않은 물병을 만들려고 한다. 물은 다음과 같이 재분배한다. 먼저 같은 양의 물이 들어있는 물병 두 개를 고른다. 그다음에 한 개의 물병에 다른 한쪽에 있는 물을 모두 붓는다. 이 방법을 필요한 만큼 계속한다. 이런 제약 때문에, N개로 K개를 넘지않는 비어있지 않은 물병을 만드는 것이 불가능할 수도 있다. 다행히도, 새로운 물병을 살 수 있다. 상점에서 사는 물병은 물이 1리터 들어있다. 예를 들어, N=3이고, K

C++ 언어 이용해서 조합 (Combination) 구현하기 [내부링크]

이번에는 C++ 언어를 이용해서 조합(Combination)을 계산하는 코드를 구현하는 방법에 대해서 간단하게 정리해 보도록 하겠습니다. 우선 조합은 파스칼의 삼각형 공식에 따라 아래와 같은 수학적 특성을 갖습니다. 수학적 증명은 기억이 나지 않지만, 제가 아는 대로 이 수식을 개념적으로 설명하자면, n개 중에서 순서에 상관없이 r 개를 뽑는 경우의 수 = 1개를 뽑은 후 n-1개 중에서 r-1개를 뽑는 경우의 수 + 1개를 빼놓고 n-1개 중에서 r 개를 뽑는 경우의 수 와 같이 저는 이해했었습니다! ⇒ n-1개 중에서 r-1개를 뽑는 경우의 수 : ⇒ n-1개 중에서 r개를 뽑는 경우의 수: 그림으로 간단히 나타내면 위와 같이 파스칼의 삼각형 상에서 계수 값이 계산됨을 의미합니다. 이렇게 하나의 문제를 더 작은 문제로 나눌 수 있게 되는 것이죠! 이런 경우 dynamic programming 혹은 재귀적으로 문제를 해결할 수 있을 것입니다. 저는 우선 위 특성을 직관적으로 반영해

확률 이론 기초 (Basic Probability Theory) 및 용어 정리 1 [내부링크]

통계(Statistic)는 정보로 전환되는 데이터를 통한 객관적인 의사 결정 과정과 관련된 학문입니다. Pattern recognition에서는 다양한 통계학의 개념들이 활용되기 때문에 머신 러닝 분야를 공부함에 있어서 매우 중요한 분야라고 할 수 있습니다. 특히 classification 같은 분야나 예측을 함에 있어서 불확실성(Uncertainty)이 항상 있을 수밖에 없기 때문에 확률 이론(probability theory)를 항상 적용해서 고려해야 합니다. 이번 포스팅에서는 전공 수업에서 배운 내용과 추가적으로 찾은 내용을 바탕으로 확률 이론 기초 및 관련 용어에 대해서 정리하도록 하겠습니다. 불확실한 내용이나 추가적인 정보는 지속적으로 업데이트하도록 하겠습니다! 1. Terminology of Statistics - A population 전체 데이터를 의미합니다. (모집단) - Samples 전체 데이터 중 일부를 의미합니다. (표본 집단) - Sample distribu

BaekJoon 1644번: 소수의 연속합, 에라토스테네스의 체 + 투 포인터, C++ [내부링크]

이번에는 1644번 소수의 연속합 문제를 풀었습니다. 문제는 에라토스테네스의 체 알고리즘을 이용해서 원하는 범위의 소수들을 구한 후 투 포인터 알고리즘을 적용해 원하는 구간에서의 연속합을 구해 문제에서 요구하는 소수의 연속합을 구하는 경우의 수를 구했습니다. 문제의 링크는 아래와 같습니다. 1644번: 소수의 연속합 문제 하나 이상의 연속된 소수의 합으로 나타낼 수 있는 자연수들이 있다. 몇 가지 자연수의 예를 들어 보면 다음과 같다. 3 : 3 (한 가지) 41 : 2+3+5+7+11+13 = 11+13+17 = 41 (세 가지) 53 : 5+7+11+13+17 = 53 (두 가지) 하지만 연속된 소수의 합으로 나타낼 수 없는 자연수들도 있는데, 20이 그 예이다. 7+13을 계산하면 20이 되기는 하나 7과 13이 연속이 아니기에 적합한 표현이 아니다. 또한 한 소수는 반드시 한 번만 덧셈에 사용될 수 있기 때문에, 3+5+5+7과 같은 표... www.acmicpc.net 에

[알고리즘] LCS (Longgest Common Subsequence), 최장 공통부분 수열 찾기 [내부링크]

LCS, 최장 공통부분 수열 찾기 알고리즘은 두 문자열의 부분 수열 중에서 가장 긴 부분 수열을 구할 때 적용할 수 있는 알고리즘입니다. Dynamic programming (동적 계획법) 방식으로 알고리즘을 구현할 수 있고, 그렇기 때문에 top-down memoization, bottom-up 방식 두 가지로 구현 방식이 나뉘게 됩니다. Dynamic programming 방식으로 알고리즘을 구현하기 위해서는 전체 문제가 Optimal substructure 구조를 가져야 합니다. 이 optimal substructure는 현재 문제의 optimal solution이 이 문제의 sub problem의 optimal solution을 포함하는 것을 의미합니다. 조금 더 쉬운 이해를 위해서 수업 시간에 배웠던 수식적인 내용으로 정리를 해보겠습니다. 두 개의 문자열을 X, Y라고 지칭하고, X_m = <x_1, x_2, ... , x_m>, Y_n = <y_1, y_2, ... , y

BaekJoon 9251번: LCS 1, Longgest Common Subsequence [내부링크]

이번에는 두 문자열의 LCS (Longgest Common Subsequence)를 찾는 백준 9251번 문제를 C++ 언어를 이용해서 풀이해 봤습니다. LCS 문제는 DP(Dynamic programming) 기법을 적용해서 풀이를 해야 하며, top-down memoization, botton-up 두 가지 방식을 모두 적용해서 풀이가 가능합니다. 저는 botton-up 방식으로 풀이를 했고, 소스 코드는 아래에 작성해 두었습니다. 문제의 링크는 다음과 같습니다. 9251번: LCS 9251번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 LCS 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 47547 19384 14213 40.455% 문제 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CA

BaekJoon 9252번: LCS 2, Longgest Common Subsequence. [내부링크]

이번에는 LCS 문제인 BOJ 9252번 LCS 2를 풀었습니다. LCS 문제는 dynamic programming 방식을 적용해서 풀이하는 최장 부분 수열을 구하는 문제로 top-down memoization, botton-up 방식을 모두 적용해서 풀이가 가능합니다. 저는 해당 문제를 처음에는 top-down memoization 방식으로 풀이하였으나, 시간 초과가 발생해 채점이 아예 되지 않는 문제가 발생해 bottom-up 방식으로 풀이했습니다. Bottom-up 방식으로 작성한 소스 코드는 글의 아랫부분에 작성해 두었습니다! 문제의 링크는 다음과 같습니다. 9252번: LCS 2 9252번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 LCS 2 스페셜 저지 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 21851 8149 6236 39.801% 문제 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두

BaekJoon 12852번: 1로 만들기 2, Dynamic programming 문제 [내부링크]

이번에는 C++ 언어를 이용해서 dynamic programming 알고리즘으로 해결 가능한 12852번 1로 만들기 2 문제를 풀어봤습니다. 1. X가 3으로 나누어떨어지는 경우, 3으로 나눈다. 2. X가 2로 나누어떨어지는 경우, 2로 나눈다. 3. 1을 뺀다. 위의 세 가지 연산이 입력받은 수 X에 대해서 적용 가능할 때, 연산을 최소 횟수로 사용해서 X를 1로 만들 때의 연산의 횟수와 연산을 사용해서 1이 만들어질 때 거쳐가는 수를 공백으로 구분하여 출력하는 문제입니다. 따라서 dynamic programming 기법을 적용해서 현재 수에서의 최소 연산 횟수를 기록함과 동시에 연산이 적용된 이후의 수를 기록해서 나중에 정수 N부터 거슬러서 연산의 흐름에 따른 수들을 출력할 수 있도록 구현했습니다. 12852번: 1로 만들기 2 12852번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 1로 만들기 2 스페셜 저지 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율

BaekJoon 2473번: 세 용액, 투 포인터(Two pointer) 문제 [내부링크]

세 용액 문제는 서로 다른 특성 값을 갖는 세 가지의 용액을 이용해서 특성 값의 합이 0에 가장 가깝도록 만드는 조합을 찾는 문제였습니다. 문제 설명에서 알고리즘 분류가 투 포인터와 이분 탐색으로 되어 있는 점을 참고해서, 배열 상에서 한 점을 고정한 상태에서 뒤에 오는 두 점을 기존의 투 포인터 문제에 적용했던 방식으로 탐색해서 세 개의 용액의 특성 값이 0에 가장 가까운 조합을 탐색하도록 구현했습니다. 탐색을 하는 과정을 쉽게 하기 위해서 입력 받은 용액의 특성 값들을 sort 함수를 이용해서 정렬하는 작업을 우선 진행했습니다. 구현 과정에서 climits라는 library를 이용해서 LLONG_MAX 매크로로 지정된 값을 이용해서 maximum 값을 사용했습니다. 또한 용액의 특성 값의 범위가 -1,000,000,000 ~ 1,000,000,000 이었기 때문에, int type으로 선언해도 될 것 같아 처음에 int type array로 선언해서 용액의 특성 값을 사용했으나,

[알고리즘] 이분 탐색 (Binary Search) 정리 및 lower_bound, upper_bound 함수 [내부링크]

저장된 데이터를 탐색하는 방식에는 대표적으로 두 가지가 있습니다. 바로 순차 탐색(linear search)과 이분 탐색(binary search)인데, 저는 그중에서도 이분 탐색에 대해서 정리해 보도록 하겠습니다. 이분 탐색은 정렬된 데이터를 계속해서 탐색의 범위를 반으로 좁히면서 순차 탐색보다 더 빠른 시간 복잡도로 배열에서 원하는 원소를 찾는 알고리즘입니다. 이분 탐색은 배열 중에서도 가운데 원소부터 탐색을 실시하며, 우리가 찾고자 하는 key 값과 현재 mid index가 가리키는 값의 대소 비교를 통해서 현재 탐색 범위 중 어느 쪽 반쪽으로 탐색의 범위를 좁힐지 탐색하는 방식을 취합니다. 아래와 같은 코드를 이용해서 이분 탐색을 구현할 수 있습니다. #include <iostream> #define NUMBER 12 using namespace std; int arr[] = { 1, 2, 3, 4, 5, 9, 13, 14, 17, 19, 35, 41 }; int search

BaekJoon 2239번: 스도쿠, Back tracking 문제 [내부링크]

이번에는 백 트래킹 예제 중 하나인 2239번 스도쿠 문제를 C++ 언어를 이용해서 풀이해 봤습니다. 스도쿠를 푸는 문제입니다! 문제 링크는 아래와 같습니다! 2239번: 스도쿠 2239번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 스도쿠 다국어 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 256 MB 8459 4106 3073 47.986% 문제 스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다음을 보자. 위 그림은 참 잘도 스도쿠 퍼즐을 푼 경우이다. 각 행에 1부터 9까지의 숫자가 중복 없이 나오고, 각 열에 1부터 9까지의... www.acmicpc.net 문제에서 주어진 힌트를 통해서 백 트래킹 문제임을 파악할 순 있었으나, 어떤 식으로 탐색하며 case들의 종료 여부를 판단하면 좋을지 생각하다

[알고리즘] 에라토스테네스의 체 (Sieve of Eratosthenes), 소수 찾기 알고리즘 [내부링크]

에라토스테네스의 체 (Sieve of Eratosthenes) 알고리즘은 소수를 찾기 위해서 사용하는 알고리즘입니다. 모든 수를 하나씩 확인하면, O(N)의 시간 복잡도가 소모되는 반면, 에라토스테네스의 체 방식을 이용하면, 1 ~ N이라고 하는 수까지 소수를 판별한다고 가정했을 때 O(N^(1/2))의 시간 복잡도로 문제를 해결할 수 있습니다. 그 이유는 어떤 수를 나누게 될 때 몫과 나누는 수가 있을 텐데, 두 수 중에서 하나는 반드시 N 제곱 근보다 작거나 같을 것이기 때문입니다. (ex 2 = 1 * 2, 4 = 2 * 2, 1 * 4와 같이 둘 중 하나는 원래 수의 제곱 근보다 작거나 같을 수밖에 없다.) 우리가 에라토스테네스의 체를 이용해 구하고자 하는 소수란 양의 약수를 두 개만 갖는 수를 의미하고, 이를 찾기 위해서 가장 작은 소수인 2부터 시작해서 소수의 배수들을 지워가는 방식을 N의 제곱 근까지 반복합니다. 이렇게 위의 과정을 진행한 후 지워지지 않은 수들을 소수라

BaekJoon 1987번: 알파벳, Backtracking 문제 [C++] [내부링크]

이번에는 C++ 언어를 이용해서 BOJ 사이트의 1987번 알파벳 문제를 이전에 공부했던 백트래킹(Back tracking) 방식을 적용해서 풀었습니다. 1987번: 알파벳 문제 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으로 이동할 수 있는데, 새로 이동한 칸에 적혀 있는 알파벳은 지금까지 지나온 모든 칸에 적혀 있는 알파벳과는 달라야 한다. 즉, 같은 알파벳이 적힌 칸을 두 번 지날 수 없다. 좌측 상단에서 시작해서, 말이 최대한 몇 칸을 지날 수 있는지를 구하는 프로그램을 작성하시오. 말이 지나는 칸은 좌측 상단의 칸도 포함된다. 입력 첫째... www.acmicpc.net 해당 문제는 중복된 알파벳을 갖는 칸을 방문하지 않으면서 최대로 진행할 수 있는 거리를 구하는 문제였고, 더 이상 진행할 수 없는 경우에는 진행을 멈

BaekJoon 1806번: 부분합, 투 포인터(Two pointer)를 이용한 풀이 [내부링크]

이번에는 BOJ의 1806번 부분합 문제를 C++ 언어를 이용해서 풀었습니다. 문제를 잘 이해한 이후 투 포인터 (two pointer) 알고리즘을 적용해서 풀이하니 간단하게 해결할 수 있었습니다. 문제의 링크입니다! 1806번: 부분합 1806번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 부분합 다국어 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 0.5 초 ( 하단 참고 ) 128 MB 46285 12052 8466 25.232% 문제 10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 ... www.acmicpc.net 문제의 입력과 출력은 다음과 같습니다. 입력: 첫째 줄에 N (10 ≤ N < 100

[개념 정리] 객체 지향 프로그래밍 (Object Oriented Programming, OOP) 이란 [내부링크]

이번에는 객체 지향 프로그래밍에 대해서 간단하게 정리해 보도록 하겠습니다. 머릿속으로는 잘 알 것 같으면서, 정리가 잘되지 않아서 글로 정리하였습니다. 객체 지향 프로그래밍이란 프로그램 설계의 방법론이자 개념의 일종이다. 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 객체 지향 프로그래밍은 프로그램을 유연하게 그리고 유지 보수가 쉽게 만들기 때문에 대규모 소프트웨어의 개발에 많이 사용된다고 하며, 코드의 직관적 분석에 도움을 준다고 합니다. 기본 구성 요소 1. 클래스 (Class) 2. 객체 (Object) 3. 메서드 (Method), 메시지 (Message) 클래스: 객체를 정의하는 틀 또는 설계도와 같은 역할을 수행한다. 클래스는 객체에 대한 속성과 함수(method)로 구성됩니다. 객체: 클래스에서 정의한 것을 바탕으로 메모리상에 할당된 것. 인스턴스화되었다고 말한다고 합니다. 메서드,

[알고리즘] 투 포인터 (Two pointers) 알고리즘, 2467번 용액 문제 풀이 [내부링크]

투 포인터 (Two pointers) 알고리즘은 1차원 배열에 순차적인 접근을 해야 하는 경우 두 개의 포인터를 이용해서 기록 및 처리를 하며 문제를 해결하는 방식을 의미한다고 합니다. 보통 배열에 대한 완전 탐색으로 풀어야 될 것 같은데, 해당 방식으로 풀이하는 경우 시간 초과가 발생할 때 투 포인터 방식으로 문제를 풀이해야 한다고 합니다. 제가 풀어본 예시 문제로는 BOJ의 2467번 용액 문제가 있습니다. 2467번: 용액 2467번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 용액 스페셜 저지 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 128 MB 13166 4577 3540 35.574% 문제 KOI 부설 과학연구소에서는 많은 종류의 산성 용액과 알칼리성 용액을 보유하고 있다. 각 용액에는 그 용액의 특성을 나타내는 하나의 정수가 주어져있다. 산성 용액의 특성값은 1부터 1,000,000,000까지의 양의 정수로 나타내고, 알칼리성 용액의 특성값은

BaekJoon 18111번: 마인크래프트, Brute-force(브루트 포스) [내부링크]

이번에는 solved.ac 기준으로 실버 2 난이도의 18111번 마인크래프트 문제를 풀었습니다. 문제의 링크는 아래에 첨부했습니다. 18111번: 마인크래프트 문제 팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 땅을 파거나 집을 지을 수 있는 게임이다. 목재를 충분히 모은 lvalue는 집을 짓기로 하였다. 하지만 고르지 않은 땅에는 집을 지을 수 없기 때문에 땅의 높이를 모두 동일하게 만드는 ‘땅 고르기’ 작업을 해야 한다. lvalue는 세로 N , 가로 M 크기의 집터를 골랐다. 집터 맨 왼쪽 위의 좌표는 (0, 0)이다. 우리의 목적은 이... www.acmicpc.net 입력: 첫째 줄에 N, M, B가 주어진다. (1 ≤ M, N ≤ 500, 0 ≤ B ≤ 6.4 × 107) 둘째 줄부터 N 개의 줄에 각각 M 개의 정수로 땅

BaekJoon 14500번: 테트로미노, Brute-force(브루트 포스) [내부링크]

이번에는 14500번 테트로미노 문제를 브루트 포스 방식으로 풀어봤습니다. solved.ac 기준으로 골드 5 난이도로 지난번 풀었던 브루트 포스 문제보다 살짝 어려웠습니다. C++ 언어를 이용해 문제를 풀었고, 소스 코드는 포스트의 맨 아랫부분에 작성해 놓았습니다. 14500번: 테트로미노 문제 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다. 정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다. 아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누어져 있으며, 각각의 칸에는 정수가 하나 쓰여 있다. 테트로미노 하나를 적... www.acmicpc.net 입력: 첫째 줄에 종이의 세

ANN(Artificial Neural Network), 인공 신경망에 대한 정리 + 활성화 함수(Activation function) [내부링크]

인공신경망(Artificial Neural Network, ANN)은 실제 뇌의 신경망에서 영감을 얻은 통계학적 학습 알고리즘입니다. 인공신경망은 시냅스의 결합으로 결합 세기를 변화시켜, 문제 해결 능력을 가지는 모델 전반을 가리킵니다. 좁은 의미에서는 오차 역전파 법 (back propagation)을 이용한 다층 퍼셉트론 (multi-layer perceptron)을 가리키는 경우도 있지만, 이것은 잘못된 용법으로, 인공신경망은 이에 국한되지 않는다고 합니다. 인공신경망은 하나의 입력 계층, 하나 이상의 은닉 계층 그리고 하나의 출력 계층을 포함하는 노드 계층으로 이루어져 있습니다. 인공신경망의 한 종류인 multi-perceptron 예시 위 그림을 예시로 들면, 맨 왼쪽의 노드 층이 입력 층, 가운데 두 개의 층이 은닉층 마지막 층이 출력층에 해당한다고 볼 수 있습니다. 또 계속해서 층이라고 설명하고 있는 것은 세로로 배치된 연속된 뉴런을 말하는 것입니다. 또 뉴런은 위 그림

BaekJoon 1197번: 최소 스패닝 트리, MST(Minimum Spanning Tree) [내부링크]

이번에는 C++ 언어를 이용해 1197번 최소 스패닝 트리 문제를 풀었습니다. 이름 그대로 최소 신장 트리를 구하는 문제였고, 저는 크루스칼 알고리즘 (Kruskal algorithm)과 프림 알고리즘 (Prim algorithm) 중 기존에 알고 있던 크루스칼 알고리즘 방식으로 문제를 풀었습니다. 문제의 링크는 다음과 같습니다. 1197번: 최소 스패닝 트리 1197번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 최소 스패닝 트리 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 128 MB 44865 18457 10332 39.900% 문제 그래프가 주어졌을 때, 그 그래프의 최소 스패닝 트리를 구하는 프로그램을 작성하시오. 최소 스패닝 트리는, 주어진 그래프의 모든 정점들을 연결하는 부분 그래프 중에서 그 가중치의 합이 최소인 트리를 말한다. 입력 첫째 줄에 정점의 개수 V(1 ≤ V ≤ 10,000)와 간선의 개수 E(1 ≤ E ≤ 100,000)가 주어진

[개념 정리] 최소 신장 트리 (Minimum Spanning Tree, MST) 정리 [내부링크]

이번에는 최소 신장 트리(Minimum spanning tree, MST)에 대해서 정리해 보도록 하겠습니다. 우선 글의 정리 순서는 다음과 같습니다. Spanning Tree Spanning Tree의 특징 MST(Minimum spanning tree)란? MST 구현 방법 크루스칼(Kruskal) 알고리즘 방식 구현 소스 코드 프림(Prim) 알고리즘 방식 구현 소스 코드 MST (Minimum Spanning Tree), 최소 신장 트리를 알아보기에 앞서 우선 Spanning tree의 개념부터 정리해 보도록 하겠습니다. Spanning Tree 최소 신장 트리 (Spanning Tree): 그래프 내의 모든 정점을 포함하는 트리를 의미합니다. Spanning tree는 그래프의 최소 연결 트리입니다. 여기서 최소 연결은 간선의 수가 가장 적음을 의미하고, 예를 들어 n개의 정점을 잇는 간선의 수는 (n-1)개이고, (n-1)개의 간선으로 연결되면 필연적으로 tree의 형태

Linear Regression(선형회귀)에 대한 정리 [내부링크]

<Linear Regression> 통계학에서 선형 회귀(linear regression)는 종속 변수 y와 한 개 이상의 독립 변수(또는 설명 변수 ) x와의 선형 상관관계를 모델링 하는 회귀분석 기법이다. 한 개의 설명 변수에 기반한 경우 단순 선형 회귀(simple linear regression), 둘 이상의 설명 변수에 기반한 경우에는 다중 선형 회귀(Multiple Linear Regression)라고 한다. 선형 회귀는 선형 예측 함수를 사용해 회귀식을 modeling 하며, 알려지지 않은 parameter는 data로부터 추정한다. 이렇게 만들어진 회귀식을 모델이라고 한다. 위 두 개의 식 중 위의 식이 단순 선형 회귀 분석의 수식, 아래의 식이 다중 선형 회귀 분석의 수식 형태입니다. 위 식의 형태에서 각각의 변수들이 의미하는 바를 생각해 보면, y는 주어진 입력에 대한 출력(label) 값, x는 입력 데이터에 해당합니다. 즉, 이미 알고 있는 data(x, y)

BaekJoon 15829번: Hashing, hash 값 구하는 간단한 문제 [내부링크]

이번에는 간단하게 Hash 값을 구하는 문제인 15829번 Hashing 문제를 풀었습니다. solved.ac 기준으로 브론즈 2 난이도의 간단한 문제이지만, 알고리즘 문제 풀이를 진행할 때 자주 범하는 실수를 이번 문제를 풀다 가도 하게 되어서 정리할 겸 글을 작성해 보겠습니다! 15829번: Hashing 문제 APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정의한다. 해시 함수는 무궁무진한 응용 분야를 갖는데, 대표적으로 자료의 저장과 탐색에 쓰인다. 이 문제에서는 여러분이 앞으로 유용하게 쓸 수 있는 해시 함수를 하나 가르쳐주고자 한다. 먼저, 편의상 입력으로 들어오는 문자열에는 영문 소문자(a, b, ..., z)로만 구성되어있다고 가정하자. 영어에는 총 26개의 알파벳이 존재하므로 a에는 1... www.acmicpc.net 입력: 첫

[Flutter] Navigator 이해 + 사용해 보기 [내부링크]

이번에는 앞서 만들었던 app page들이 서로 연결되기 위해서 알아야 하는 navigator의 개념에 대해서 공부한 바를 정리해 보고, 이를 사용한 실습을 정리해 보겠습니다. 이번에는 android studio를 이용해서 실습을 진행했고, 이전에 정리한 context 개념이 이번에도 등장하니 유의하시기 바랍니다! 오늘 공부할 내용들 1. Route의 개념 2. Navigator의 정의와 push, pop 함수 (stack 자료구조) 3. MaterialPageRoute widget과 context 4. 위 개념을 바탕으로 page 이동 기능을 구현 Flutter 공식 문서에서 정리한 route의 개념은 다음과 같습니다. Mobile apps typically reveal their contents via full-screen elements called “screens” or “pages”. In Flutter these elements are called routes Flutt

[개념 정리] cin.getline() vs getline(), 둘의 차이점? [내부링크]

C++ 언어를 이용해서 코딩을 진행하다 보니 cin.getline, getline 이름이 같은 두 함수를 사용할 때마다 헷갈려서 정확한 차이점을 한 번 정리하도록 하겠습니다. 우선 C++ 공식 문서에서 두 함수의 정의를 읽어봤습니다. 1. cin.getline(char *s, streamsize n) Extracts characters from the stream as unformatted input and stores them into s as c-string, until either the extracted character is the delimiting character, or n characters have been written to s (including the terminating null character). delimiting character를 만나거나 n 개의 문자를 입력받을 때까지 정형화되지 않은 입력의 흐름으로부터 문자열을 추출하고 c-string type의

[개념 정리] sort() 함수에 대한 정리 + 간단한 예시 [내부링크]

이번 글에서는 cpp에서 가장 많이 사용되는 sort() 함수에 대해서 정리해 보겠습니다. Format void sort (RandomAccessIterator first, RandomAccessIterator last); void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp); Sorts the elements in the range [first, last] into ascending order. The elements are compared using operator< for the first version, and comp for the second. Equivalent elements are not guranteed to keep their original relative order. C++ 공식 문서 sort 함수는 first ~ last 범위 내의 elements 들을 오름차순으로 정

주말 급 제주 북서부 여행 [내부링크]

지난 주말에는 개강 전에 마지막으로 제주도 여행을 급하게 다녀왔습니다. 도착하자마자 배고파서 고기 국수 먹으러 갔는데, 너무 맛있게 먹어서 벌써 또 먹고 싶다. 사이드로 유부초밥도 시켰는데, 한 개씩 먹기에 최고였다 밥먹고 젤라또도 먹어주고 (녹차맛이랑 미숫가루맛? 먹었던 것 같은데, 맛있었던 것 같다.) 여기저기 돌아다니다가 저녁으로 조개구이도 처음으로 먹어봤습니다. 다음 날에는 아르떼뮤지엄이라는 곳에 가서 구경하고 사진도 찍었습니다. 다른 차원으로 어쩌구 했는데, 잘 모르겠다 경치 한 번 찍어주고 다음으로는, 새별오름 바로 앞까지 갔다가 비가와서 안올라가고 대신 옆에 있는 음식점에서 쌀국수도 먹고 저녁먹기 전.......

[Flutter] 스낵바(snack bar)와 build context 정리하기 [내부링크]

이번에는 지난 포스팅에 이어서 BuildContext에 대한 개념을 마저 공부하고, snack bar가 무엇인지 강의를 통해 공부한 내용을 정리해 보겠습니다. 우선 Snack bar가 무엇인지 간단히 설명하면, 앱 스크린의 하단에 간단한 메시지를 띄우는 기능을 의미합니다. app bar를 만들어준 이후 button을 누르면 snack bar가 뜨도록 구현하기 위해서 우선 버튼을 만들어줍니다. button은 body 속성 내에서 만들어주며, Flatbutton widget을 이용해서 만들었습니다. Center widget으로 FlatButton widget을 감싸주었기 때문에, 버튼이 앱 스크린의 한 가운데에 생성될 것이고, 버튼의 색상은 red, 버튼에 작성된 text의 색상은 white로 설정했습니다. 이제.......

[Flutter] 빌더(Builder widget) 위젯 없이 스낵바(snack bar) 만들기 + Toast message 구현 [내부링크]

#flutter #flutter기초 #코딩셰프강의정리 #builder #snackbar #toast #메시지띄우기 #fluttertoast 이번 포스팅에서는 두 가지 주제를 공부한 내용을 정리해 보겠습니다! 1. Builder widget 없이 snack bar 만들어보기 + snack bar customizing 2. Toast message 만들기 (사용자에게 짧은 메시지 형식으로 정보를 전달하는 팝업) 이번에는 위와 같이 MyPage widget을 만든 상태에서 실습을 시작하겠습니다. 앞선 글에서는 Scaffold widget에 대한 context를 얻기 위해서 Builder widget을 사용했었습니다. 이번에는 위의 widget tree 같이 MySnackBar라는 custon widget을 생성해서 snack bar를 구현해 보겠습니다. 그래서 이전과는 다르게 body.......

BaekJoon 2164번: 카드 2, 간단한 구현 문제 [내부링크]

#백준 #2164번 #queue #구현문제 #알고리즘 #cpp 이번에는 BOJ 사이트에서 간단한 구현 문제를 풀어봤습니다. solved.ac 기준으로 실버 4 난이도의 상대적으로 간단한 난이도의 문제로 저는 C++ 언어를 풀이에 이용했습니다. https://www.acmicpc.net/problem/2164 입력: 첫째 줄에 정수 N(1 ≤ N ≤ 500,000)이 주어진다. 출력: 첫째 줄에 남게 되는 카드의 번호를 출력한다. 이번 문제는 아래와 같은 과정으로 생각해 문제를 풀었습니다. 1. 이런 방식으로 element를 넣고 뺄 수 있는 자료 구조가 있을까? 2. Queue 자료 구조를 사용할 수 있을 것 같다. 3. Queue를 이용해 쉽게 해결 성공 Queue 자료 구조를 생각해낸 이유는 먼저 넣은 카드를.......

[오류] Segmentation fault가 발생하는 이유 [내부링크]

#segmentationfault #알고리즘 #문제풀이 #error #access 위키 백과에 따르면 Segmentation fault를 다음과 같이 정의하고 있습니다. In computing, a segmentation fault (often shortened to segfault) or access violation is a fault, or failure condition, raised by hardware with memory protection, notifying an operating system (OS) the software has attempted to access a restricted area of memory (a memory access violation). 제가 이해한 바에 따라 간략하게 설명하면, 권한이 없는(허용되지 않은) 영역의 메모리 공간에 접근하려고 할 때, 운영체제(OS)가 software에게 권한이 없음을 알리는 접근 경고입니다. 프로그래밍.......

[Flutter] Container widget 자세하게 공부하기 [내부링크]

이번에는 간단한 실습을 통해서 Container widget을 공부한 내용을 정리하겠습니다. Flutter 공식 문서에 따른 Container widget의 크기 정보는 다음과 같습니다. Containers with no children try to be as big as possible. 그냥 child widget이 없는 Container widget의 크기는 최대 크기를 갖는다는 것을 의미합니다. 간단하게 실습을 통해서 무슨 말인지 확인해 보겠습니다. 이번 실습에서도 지난번에 이어 android studio를 이용하도록 하겠습니다. 우선 아래와 같이 코드를 작성했습니다. lib/main.dart 경로에서 main.dart 파일에 대한 코드입니다. vs code에서와 같이 flutter 프로젝트를 생성하고 위 코드를 작성해 줬습니다. 코드 설.......

머신 러닝(Machine learning)과 딥러닝(Deep learning)이란? [내부링크]

&#60;머신 러닝&#62; 기계학습 또는 머신 러닝은 경험을 통해 자동으로 개선하는 컴퓨터 알고리즘 연구이며 인공지능의 한 분야로 간주된다. 컴퓨터가 학습할 수 있도록 하는 알고리즘과 기술을 개발하는 분야이다. 가령, 기계 학습을 통해서 수신한 이메일이 스팸인지 아닌지를 구분할 수 있도록 훈련할 수 있다. 1959년 머신 러닝은 아서 사무엘에 의해 &#34;기계가 일일이 코드로 명시하지 않은 동작을 데이터로부터 학습하여 실행할 수 있도록 하는 알고리즘을 개발하는 연구 분야&#34;라고 정의되었습니다. 기계 학습의 핵심은 표현(representation)과 일반화(generalization)에 있다. 표현이란 데이터의 평가이며, 일반화란 아직 알 수 없.......

BaekJoon 2206번: 벽 부수고 이동하기, BFS 문제 [내부링크]

이번에는 BOJ 사이트에서 2206번 벽 부수고 이동하기 문제를 풀었습니다. solved.ac 기준으로 골드 4 난이도의 문제입니다. 문제의 링크는 아래와 같습니다. 우선 문제의 입력과 출력은 다음과 같습니다. 입력: 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000)이 주어진다. 다음 N개의 줄에 M개의 숫자로 맵이 주어진다. (1, 1)과 (N, M)은 항상 0이라고 가정하자. 출력: 첫째 줄에 최단 거리를 출력한다. 불가능할 때는 -1을 출력한다. 문제가 가중치가 없는 그래프의 탐색 유형이라고 생각되어, BFS 혹은 DFS 방식으로 문제를 풀어야겠다고 생각하기는 쉬웠으나, 벽을 한 번까지 부술 수 있을 때라는 조건으로 인해서 구현에 있어서 어.......

[Flutter] Column, Row widget 되짚어보기 [내부링크]

이번 포스팅에서는 Flutter로 앱 개발 시에 많이 사용하는 Column, Row widget을 자세히 정리해 보겠습니다. 역시나 flutter inspector를 사용하기 위해서 android studio를 이용해 실습을 진행하겠습니다. SafeArea widget으로 Column widget을 둘러싸도록 위의 단계까지 구현한 상태에서 코딩을 시작해 보겠습니다. Container widget 과는 다르게 Column widget은 child를 여러 개 갖는 widget이기 때문에, children 속성을 이용해서 child widgets을 선언합니다. 저는 다음과 같이 3개의 Container widget을 Column widget의 children으로 만들어 주겠습니다. 위와 같이 코딩을 했습니다. 위 코드의 결과로 다음과 같이 노란색, 빨간색, 초록.......

BaekJoon 13549번: 숨바꼭질 3, BFS를 이용한 간단한 풀이 [내부링크]

이번에 풀어본 문제는, solved.ac 기준으로 골드 5 난이도의 숨바꼭질 3 문제입니다. 문제의 링크는 아래와 같고, 저는 C++ 언어를 이용해서 풀이를 진행했습니다. 아래와 같이 풀려고 하였으나, 이동 시 후진이 가능한 문제의 조건을 읽지 못한 점과, 그러한 점이 추가된다면 아래의 방식으로는 온전히 최적의 경로에 대한 cost를 찾을 수 없다고 판단되어 다른 방식으로 문제에 접근하였습니다. 문제를 푸는 방식이 바로 생각이 안 나서 아래와 같이 힌트를 참고해서 어떤 알고리즘으로 풀면 좋은 문제인지 확인했습니다. 다익스트라 방식으로 푸는 방법은 생각해 봤으나, 아직 배움이 부족해 잘 모르겠다는 생각이 들어서 BFS 방식으로 문제를.......

[Flutter] BuildContext란? [내부링크]

#flutter #flutter기초공부 #코딩셰프강의정리 #BuildContext #context 이번 포스팅에서는 BuildContext라는 것을 공부해 보겠습니다! 이 BuildContext는 그 동안 실습을 진행하면서 build 함수의 인자의 type으로 많이 봐왔는데, 이번 기회에 개념을 정리해보겠습니다. BuildContext란?? 우선 flutter 공식 문서에 따른 build context의 정의는 다음 두 가지입니다. 1. &#34;A handle to the location of a widget in the widget tree.&#34; &#x3D; &#34;widget tree에서 현재 widget에 대한 위치를 알 수 있는 정보&#34; 2. &#34;Each widget has its own BuildContext, which becomes the parent of the widget returned by the Stateles.......

BaekJoon 9663번: N-Queen (backtracking 예제) [내부링크]

이번에는 지난번에 아래의 포스팅에서 공부했던 백트래킹 개념을 이용한 대표적인 문제 N-Queen 문제를 C++ 언어를 이용해서 풀어봤습니다. 코드는 글의 맨 아래에 첨부하겠습니다! 지난번에 공부했던 백트래킹의 개념은 DFS 같은 탐색 방식을 취해서 모든 조합의 수를 탐색하며 답을 찾지만, 중간에 답이 될 수 없다고 판단되는 case에 대해서는 탐색을 중지하는 방식으로 문제를 해결하여 단순하게 모든 케이스를 브루트 포스 방식처럼 탐색하는 것보다 효율적인 문제 해결 방식이라고 공부했었습니다. 백트래킹에 대한 개념을 공부해서 &#34;모든 경우를 DFS 방식처럼 순회하되 조건을 판단해서 해당 경로의 유망성 여부만 판정하면 되겠구나.......

BaekJoon 2667번: 단지 번호 붙이기, 그래프 순회를 이용한 풀이 (C++) [내부링크]

#cpp #백준 #문제풀이 #알고리즘 #그래프순회 #BFS #BOJ 이번에는 BFS 또는 DFS를 이용해 그래프를 순회하며 단지의 개수를 세는 간단한 문제인 2667번 문제를 C++ 언어를 이용해서 풀어봤습니다. 문제의 링크는 아래와 같습니다! https://www.acmicpc.net/problem/2667 저는 이 문제는 BFS, DFS 두 방식이 어떤 방식 이느냐에 상관없이 단순히 그래프 순회를 통해서 단지의 개수만을 확인하면 되는 문제였기 때문에 이전 문제에서 사용하지 않았던 BFS 방식으로 이번 문제를 풀었습니다. 문제의 입력이 주어지는 조건과 우리가 만들어야 하는 프로그램의 출력 조건은 아래와 같습니다. 입력: 첫 번째 줄에는 지도의 크기 N(정사각형이므로 가로.......

[Flutter] AppBar 위에 메뉴 아이콘 추가하기 [내부링크]

#flutter #flutter기초 #dart #appbar #menu #menuicon #flutter메뉴 이번에는 Application page 위의 app bar 위에 메뉴 아이콘을 추가하는 방법에 대해서 공부한 내용을 정리해보겠습니다. 우선 새로운 프로젝트를 생성해서 Scaffold widget에서 AppBar widget을 추가하는 부분까지 코딩을 해줍니다. 코드를 간략히 설명하면, Appbar라는 이름의 application에 대한 코드이고 전체적인 application의 색조는 primarySwatch 속성에 의해 red 계열로 설정했습니다. 현재 Scaffold widget은 AppBar widget 하나만을 child widget으로 갖고 있습니다. 추가적으로 debugShowCheckModeBanner argument의 값을 false로 변경해 우측 상단의 debug 띠를.......

[Flutter] Drawer widget을 이용한 메뉴 만들기 1 [내부링크]

#flutter #flutter기초공부 #코딩셰프강의정리 #drawerwidget #메뉴만들기 이번에는 drawer 속성을 이용해 app bar에서 menu를 만드는 방법을 정리해 보겠습니다. 두 차례의 글에 걸쳐서 위와 같은 결과 앱 페이지를 만들어 보려고 합니다. 우선 지난 시간에 구현한 코드에서 스크롤 한 부분만 삭제한 후에 그대로 이어서 구현을 해보겠습니다. 실습을 시작하기 앞서 Scaffold widget에 마우스 커서를 올려 ctrl 키를 누른 채로 클릭하면 위와 같이 Scaffold class를 정의한 코드가 나옵니다. Scaffold widget의 여러 속성에 대해 정의하는 부분에서 this.drawer라는 속성을 확인할 수 있고, 이번 시간에는 이를 활용해 볼 겁니다. (지난번에 공.......

[알고리즘] Backtracking(백트래킹)이란? [내부링크]

#DFS #BFS #backtracking #알고리즘기초 #코딩공부 이번에는 backtracking(역추적)이라고 하는 개념에 대해서 공부해 본 내용을 정리해 보도록 하겠습니다. 백트래킹에 대해서 구글에 검색을 해보니, 위키피디아에 아래와 같은 원문 정의가 나왔습니다. Backtracking is genral algorithm for finding solutions to some computational problems, notably constraint satisfaction problems, that incrementally builds candidates to the solutions, and abandons a candidate (&#34;backtracks&#34;) as soon as it determines that the candidate cannot possibly be completed to a valid solutions. 정의를 간단하게 해석해 보면, backtra.......

[Flutter] Drawer widget을 이용한 메뉴 만들기 2 [내부링크]

#flutter #flutter기초 #코딩셰프강의정리 #drawer #drawerwidget #메뉴만들기 이번 글에서는 지난 글에 이어 Drawer widget을 이용해 menu를 만드는 작업을 마무리 해보도록 하겠습니다. 우선 현재 계정 이미지까지 추가했던 지난 상태에서 이번에는 우측 상단에 다른 계정의 이미지를 추가해보겠습니다. 이를 위해서 current AccountPicture속성과 CircleAvatar widget 아래에 otherAccountPictures 속성을 선언해줍니다. (이름만 봐도 알 수 있듯이 다른 계정의 이미지를 추가할 때 사용하는 속성입니다!) 이제 위 형태를 보면 알 수 있듯이 다른 계정의 이미지는 한 개가 아니라 여러 개를 추가할 수 있습니다! 따라서 위와 같이 widget list.......

Flutter Dart 문법 정리 2: class와 widget이란? [내부링크]

#flutter #dart #flutter기초 #코딩셰프강의정리 #AppPackaging 지난 글에서 dart에서의 클래스, 객체, instance에 대한 개념 정리를 했습니다. 이번에는 지난 시간에 이어서 flutter 및 dart에 대한 기본 개념을 마저 공부해도록 하겠습니다. 이번 시간에 공부하고자하는 목표는 다음 세 가지입니다! 1. 생성자와 관련된 함수의 구조와 기능 학습 2. 생성자의 구조와 역할은? 3. 클래스와 위젯의 관계 우선 지난 글에서 위의 코드까지 공부를 했습니다. 하지만, 위의 코드에서와 같이 instance를 생성하는 경우에 모든 instance가 같은 member 변수 값을 갖는 결과를 유발합니다. 그렇다고 member를 하나하나 접근해서 main method 혹은 다른 me.......

BaekJoon 9465번: 스티커 (간단한 동적 프로그래밍 문제) [내부링크]

#dp #동적프로그래밍 #백준 #9465번 #문제풀이 #알고리즘 이번에는 solved.ac 기준으로 실버 1 난이도의 9465번 스티커 문제를 풀어봤습니다. 문제는 2 x n 사이즈의 품질이 좋지 않은 스티커를 각 스티커의 점수 합산이 최대가 되도록 하는 스티커의 조합을 선택하는 문제입니다. 문제의 링크입니다! https://www.acmicpc.net/problem/9465 저 같은 경우에는 동적 할당 문제라는 것은 바로 알 수 있었으나 규칙을 찾는데 시간이 조금 걸렸지만, 생각해본 결과 아래와 같은 규칙을 적용할 수 있었습니다. 적용한 규칙 1. 왼쪽에서 오른쪽 순서로 스티커를 떼겠다. 2. 현재 스티커를 기준으로 좌측으로 대각선에 위치한 스티커 또는 두칸 이전의 스.......

BaekJoon 11444번: 피보나치 수 6 [내부링크]

#BOJ #백준 #11444번 #피보나치수열 #분할정복 #DP #도가뉴항등식 #fibonacci #cpp #c 이번에는 BOJ 사이트에서 11444번 피보나치 수 6 문제를 C++ 언어로 풀어봤습니다. 기존에 다른 피보나치 수열 문제와 구해야 하는 답 자체는 동일했으나, 이번 문제를 풀기 위해 다른 지식들이 필요했어서 공부한 내용들을 정리해보도록 하겠습니다. 정답 코드는 아래에 있습니다! https://www.acmicpc.net/problem/11444 solved.ac 기준으로 골드 2 문제로 풀기 위해 여러가지 개념을 알아야 합니다! 우선 이전에 간단한 피보나치 수열 문제를 풀기 위해서 사용했던 피보나치 수열의 공식은 아래와 같았습니다. 그런데, 이번 문제를 위 수식을 위해서 푸는.......

BaekJoon 1032번: 명령 프롬프트 [내부링크]

#백준 #BOJ #1032번 #알고리즘 #문제풀이 #cpp #c #명령프롬프트 이번에는 BOJ 사이트에서 간단하게 브론즈1 난이도(solved.ac 기준)의 명령 프롬프트 문제를 풀어봤습니다. https://www.acmicpc.net/problem/1032 이 문제는 명령 프롬프트 상에서 dir 패턴 방식으로 검색을 했을 때 (ex: dir a?b.exe 와 같이 검색하는 경우) acb.exe, aab.exe, apb.exe 같은 검색 결과가 나오는 것에서 착안하여 출제된 문제입니다. 저는 이번 문제를 간단하게 문자열을 모두 입력받은 후에 strMaxLen이라는 변수를 이용해 현재 최장 길이(현재 검사한 문자열에 대한 가장 긴 공통 부분 문자열)의 문자열을 저장하며 모든 문자열을 비교하는 간단한 방식으로 문.......

BaekJoon 2176번, 11660번: 부분합 구하기 [내부링크]

#BOJ #baekjoon #알고리즘 #부분합 #2차원배열 #구간합 이번에는 BOJ 사이트에서 2차원 배열의 부분합을 구하는 문제에 DP(dynamic programming) 기법을 적용해서 문제를 풀어봤습니다. https://www.acmicpc.net/problem/11660 https://www.acmicpc.net/problem/2167 저는 두 문제가 유사하다고 판단하어 2167번 문제를 먼저 풀고난 후에 코드를 약간 수정해서 11660번 문제를 풀었습니다. 두 문제에서 2차원 배열 상에서 구간의 합을 구할 때, 배열의 해당 구간을 모두 방문하여 더해주도록 코딩하는 경우 시간초과로 인해 정답처리가 되지 않는 문제가 발생했습니다. 그에 따라서 DP 기법을 적용해 구간의 합을 O(n * n) or O(n * m)의 시간 복.......

Flutter Dart 문법 정리 1: class와 widget이란? [내부링크]

#flutter #dart #flutter기초 #코딩셰프강의정리 #programminglanguage 이번 글에서는 보다 더 세련되고 정확한 문법의 구사를 위해 dart 언어에 대해서 조금 공부해도록 하겠습니다. Class and Widget C++ 같은 객체지향언어에서 공부한 바와 동일하게 class는 설계도 혹은 틀의 역할이라고 생각하면 좋습니다. 즉, class 자체가 객체의 역할을 수행하는 것이 아니라 class에서 객체의 속성과 기능에 대해 정의합니다. 이렇게 class에 정의된 속성과 기능에 따라 생성되는 결과물 하나하나를 instance라고 합니다. 간단하게 비유를 들자면, 스마트폰의 설계도면을 class 설계도면을 이용해 만들어진 스마트폰 하나하나를 instance라고 생각하면.......