Computer_Language 69

[백준] 4195번 친구 네트워크 파이썬 해설 (디스조인트-셋)

출처 : https://www.acmicpc.net/problem/4195 4195번: 친구 네트워크 문제 민혁이는 소셜 네트워크 사이트에서 친구를 만드는 것을 좋아하는 친구이다. 우표를 모으는 취미가 있듯이, 민혁이는 소셜 네트워크 사이트에서 친구를 모으는 것이 취미이다. 어떤 사이트의 친구 관계가 생긴 순서대로 주어졌을 때, 두 사람의 친구 네트워크에 몇 명이 있는지 구하는 프로그램을 작성하시오. 친구 네트워크란 친구 관계만으로 이동할 수 있는 사이를 말한다. 입력 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 친구 관계 www.acmicpc.net 여러 가지 알고리즘으로 분류되어있는 문제이다. 디스조인트-셋(Disjoint-set) 알고리즘을 공부하기 위해 해당 알고리..

[DB][MySQL] 데이터베이스의 DDL(Data Definition Language)

이번 포스트는 MySQL을 사용하여 데이터베이스의 DDL을 정리해보려고 한다. 긴 말없이 바로 시작해보자. CREATE 명령 오늘은 CREATE명령을 사용하여 DATABASE와 TABLE을 만들어 볼 예정이다. 먼저 이전 강의에서 세팅한 MySQL로 접속해보자. 새로운 테이블을 정의하기 전에 테이블을 생성할 데이터페이스를 먼저 생성해야 한다. 다음 명령어를 순서대로 입력한 뒤 결과를 확인해보자. 1. CREATE DATABASE JOO_DATA; 2. SHOW DATABASES; 이제 가장 많이 사용하는 CREATE TABLE 구문을 사용하여 테이블을 생성해 볼 것이다. CREATE TABLE구문은 다음과 같은 문법으로 사용한다. (가장 기본으로 필요한 성분만 적었다.) CREATE TABLE 테이블이름..

[백준] 1753번 최단경로 파이썬 해설 (다익스트라 알고리즘)

출처 : https://www.acmicpc.net/problem/1753 1753번: 최단경로 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1≤V≤20,000, 1≤E≤300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1≤K≤V)가 주어진다. 셋째 줄부터 E개의 줄에 걸쳐 각 간선을 나타내는 세 개의 정수 (u, v, w)가 순서대로 주어진다. 이는 u에서 v로 가는 가중치 w인 간선이 존재한다는 뜻이다. u와 v는 서로 다르며 w는 10 이하의 자연수이다. 서로 다른 두 www.acmicpc.net 다익스트라 알고리즘으로 분류된 문제이다. 다익스트라 알고리즘은 하나의 정점에서 나머지 모든 정점까지의 최단 거리를 찾는 알고리즘이..

[Python] 파이썬 eval 과 exec 함수에 대하여

오늘은 편리하면서 위험한 함수인 eval과 exec함수에 대해서 정리해보려고 한다. 두 함수 모두 파이썬 내장 함수이며, 아마 파이썬 언어를 공부하면서 지나가다 한 번쯤 봤을 수도 있다. 왜 편리하면서 위험한지 공부해보자. eval 함수 eval 함수는 실행 가능한 문자열을 매개변수로 입력받아 문자열 자체를 실행한 결과값을 리턴해준다. 설명을 잘 못하니 직접 실행시켜보자. >>>> print(eval("5+5")) 10 파이썬 해석기에서 바로 실행한 결과이다. 문자열 "5+5"를 연산 5+5로 해석한 뒤 결과값으로 정수 10을 반환하는 것을 볼 수 있다. 얼핏 보면 정말 편리한 기능을 가진 함수지만, 남용하면 시스템에 큰 오류를 일으킬 수도 있다. 아래 코드를 실행시켜보자. string2 = ''' a+..

[백준] 3985번 롤 케이크 파이썬 해설

출처 : https://www.acmicpc.net/problem/3985 3985번: 롤 케이크 문제 인기 티비 프로그램 "나는 요리사 인가?"의 새 시즌이 시작한다. 이번 시즌은 기네스북에 등재될 만한 음식을 만드는 것을 목표로 진행한다. 첫 번째 에피소드에 출연하는 요리사는 전설의 요리사 김상근이고, 길이 L미터의 롤 케이크를 만들 것이다. 상근은 몇 시간동안 집중해서 케이크를 만들었고, 이제 스튜디오의 방청객 N명에게 케이크를 나누어 주려고 한다. 상근이는 롤 케이크를 펼쳐서 1미터 단위로 잘라 놓았다. 가장 왼쪽 조각이 1번, 오른쪽 조각이 www.acmicpc.net 시뮬레이션으로 알고리즘으로 분류된 문제이다. 개인적으로 시뮬레이션 문제가 익숙하지 않아서 많이 풀어보려고 하는 중이다. 그냥 한..

[DB][MySQL] 데이터베이스를 공부하기 전 기본 개념과 개발 환경 설정

관계형 데이터 베이스 관리 시스템 (RDBMS) DB공부에 사용할 Data Base Management System(이하 BDMS)는 MySQL이다. 모든 DB가 표준 SQL을 기본으로 하기 때문에 가장 기본적으로 공부하기 위한 DB를 선택했다. 공부에 사용 할 MySQL은 관계형 데이터 베이스 관리 시스템이다. 위 랭킹표에서 볼 수 있는 것처럼, 가장 보편화된 모델 중 하나이다. 테이블을 사용하여 데이터를 정의하고, 속성과 값 사이의 관계를 이용한다고 생각하면 된다. (정보처리 기사 자격증을 취득한 것이 도움이 될 것 같다.) SQL(Structured Query Language) 컴퓨터 언어의 종류에 C언어나 Python언어가 있듯이 SQL은 RDBMS을 관리하기 위한 표준 프로그래밍 언어이다. 실제..

[Go] 7. Go(golang)의 배열과 슬라이스

오늘 정리할 내용은 배열(array)과 슬라이스(slice)이다. 배열에 대한 내용은 타 언어와 매우 유사하여 금방 정리하겠지만, 슬라이스에 대한 내용은 익숙한 개념이 아니기 때문에 추후 수정이 있을 것 같다. C++의 벡터와 유사한 것 같기도 한데.. 일단 정리해보자 Go언어는 "컬렉션"이라는 개념이 존재한다. 두 개 이상의 변수를 모아 놓은 것을 말하는 단어이며, 오늘 정리할 배열과 슬라이스도 "컬렉션"에 포함된다. Go언어의 배열 Go언어의 배열은 C언어의 배열, 즉 Managed Language의 배열과 유사하다. 정적 배열이라고 하는데, 쉽게 말해서 컴파일 과정에서 배열의 크기가 정해져 있어야 한다는 뜻이다. 먼저 가장 기본적인 코드를 실행시켜보자. package main import "fmt"..

[백준] 14409번 주사위 굴리기 파이썬 해설

출처 : https://www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도에 쓰여 있는 수가 북쪽부터 남쪽으로, 각 줄은 서쪽부터 동쪽 순서대로 주어진다. 주사위를 놓은 칸에 쓰여 있는 수는 항상 0이다. 지도의 각 칸에 쓰여 있는 수는 10을 넘지 않는 자연수 또는 0이다. 마 www.acmicpc.net 시뮬레이션으로 알고리즘으로 분류된 문제이다. 코딩 테스트를 준비하는 데 있어서 주사위 문제는 필수라고 생각한다. 가장 ..

[백준] 14501번 퇴사 파이썬 해설

출처 : https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 부루트 포스, 다이나믹 프로그래밍 알고리즘으로 분류된 문제이다. 부루트 포스 알고리즘은 모든 경우를 다 비교해보는 무식한 알고리즘이라고 하는데 사실 다이나믹 프로그래밍과의 차이를 모르겠다. 풀이 나름 부루트 포스 알고리즘의 방향으로 접근해보려 했으나, 정답을 맞히고 보니 다이나믹 프로그래밍 알고리즘을 이용해서 문제를 해결하였다. 정말 무슨 차이인지 모르겠다. 우선 문제를 잘 이해하고 문제 풀이의 흐름을 정했다. N이 주어지면 마지막 N일 부터 최대로 돈을 벌 수 있는 경우를 체크했다. 여기서 주의할 점은 N번째 날은 상담에 ..

[백준] 2217번 로프 파이썬 해설

출처: https://www.acmicpc.net/problem/2217 2217번: 로프 N(1≤N≤100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다. 각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 www.acmicpc.net 그리디 알고리즘으로 분류된 문제이다. 그리디 알고리즘의 정의는 미리 정한 기준에 따라서 매번 가장 좋아 보이는 답을 선택하는 알고리즘이..