개발
Procedure, Function
프로시저와 함수의 정의와 차이를 해보려한다. 정의 : 일련의 쿼리를 마치 하나의 함수처럼 사용하기 위한 쿼리의 집합 - 특정 작업을 수행하는, 이름이 있는 PL/SQL BLOCK 차이점 : Procedure (프로시져) - 서버 측에서 실행된다. Function (함수) - 클라이언트 측에서 실행된다. DB 상에서 쓰이는 용어로서, 다른 게시글 찾아보면 뭐 IN OUT 있다고 하는데 정작 팩트를 가려낼 수 없어 적지 않았다.
Call by Value, Call by Reference
콜 바이 밸류, 콜 바이 레퍼런스 많이 들어 봤다. 이 글을 쓰기 위해 공부를 하면서 Call by Address, Call by Assignment 등을 들어봤다. 그러나 언어에 따른 차이점인 것 같아 크게 들어본 Value, Reference에 대해서만 언급하기로 한다. --> 추후, 프로그래밍 언어 공부에 따라 다른 부분도 필요하면 업로드할 예정. 항상 말하지만, 정확한 정의, 해석 전달을 해주고 싶다. 그러나 능력이 부족해 올바르게 전달하지 못할 수 있다. 그래서 댓글이나 연락을 준다면 꼭 수렴해 변경하고 싶다. 먼저, 각 정의부터 정리하고, 차이점을 짚어주겠다. 함수 호출방식에 따른 단어. 1. Call by value ( 값에 의한 호출 ) - C++ 경우, 함수가 호출될 때, 메모리 공간 안..
백준 10451번: 순열 사이클
문제링크: https://www.acmicpc.net/problem/10451 10451번: 순열 사이클 문제 1부터 N까지 정수 N개로 이루어진 순열을 나타내는 방법은 여러 가지가 있다. 예를 들어, 8개의 수로 이루어진 순열 (3, 2, 7, 8, 1, 4, 5, 6)을 배열을 이용해 표현하면 \(\begin{pmatrix} 1 & 2 &3&4&5&6&7&8 \\ 3& 2&7&8&1&4&5&6 \end{pmatrix}\) 와 같다. 또는, Figure 1과 같이 방향 그래프로 나타낼 수도 있다. 순열을 배열을 이용해 \(\begin{pmatrix} 1 www.acmicpc.net 문제 해결 방법은, 기본 DFS 방문 표시를 하면서 깊이 탐색하다보니, Main 문에서 실행되는 DFS 함수의 횟수는 순열..
백준 9466번: 텀 프로젝트
문제링크: https://www.acmicpc.net/problem/9466 9466번: 텀 프로젝트 문제 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 수도 있다. 프로젝트 팀을 구성하기 위해, 모든 학생들은 프로젝트를 함께하고 싶은 학생을 선택해야 한다. (단, 단 한 명만 선택할 수 있다.) 혼자 하고 싶어하는 학생은 자기 자신을 선택하는 것도 가능하다. 학생들이(s1, s2, ..., sr)이라 할 때, r= www.acmicpc.net 처음에는 그냥 단순 DFS인줄 알았다. 순환인 그래프를 찾는 DFS였다. BOOL 배열 변수 하나 선언해서 진행했다. (사..
백준 1325번: 효율적인 해킹
문제링크: https://www.acmicpc.net/problem/1325 1325번: 효율적인 해킹 첫째 줄에, N과 M이 들어온다. N은 10,000보다 작거나 같은 자연수, M은 100,000보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에 신뢰하는 관계가 A B와 같은 형식으로 들어오며, "A가 B를 신뢰한다"를 의미한다. 컴퓨터는 1번부터 N번까지 번호가 하나씩 매겨져 있다. www.acmicpc.net 전형적인 DFS문제 어렵지 않다. 사실 정답률 보고, 얼마나 오래 걸릴까 걱정했는데 1시간? 30분? 이렇게 푼 것 같다. 그러나 문제를 착각할 수가 있다. A가 B를 신뢰한다 == 서로가 서로를 신뢰하다고 보면 안된다. 그래서 벡터에 넣어놓고 보면 방향성이 있는 그래프로 확인할 수 있다..
백준 1963번: 소수 경로
문제 링크: https://www.acmicpc.net/problem/1963 1963번: 소수 경로 문제 소수를 유난히도 좋아하는 창영이는 게임 아이디 비밀번호를 4자리 ‘소수’로 정해놓았다. 어느 날 창영이는 친한 친구와 대화를 나누었는데: “이제 슬슬 비번 바꿀 때도 됐잖아” “응 지금은 1033으로 해놨는데... 다음 소수를 무엇으로 할지 고민중이야" “그럼 8179로 해” “흠... 생각 좀 해볼게. 이 게임은 좀 이상해서 비밀번호를 한 번에 한 자리 밖에 못 바꾼단 말이야. 예를 들어 내가 첫 자리만 바꾸면 8033이 되니까 소수가 아니잖아. www.acmicpc.net 아이디어 : 1. 에라토스테네스의 체를 통해 10000이하 소수를 구한다. 2. 한 자리 씩 바꿔가며, 소수가 가능한 경우의..
백준 1389번: 케빈 베이컨의 6단계 법칙
문제 링크: https://www.acmicpc.net/problem/1389 불러오는 중입니다... 아이디어 : 플로이드 와샬 알고리즘 의견 : 처음에는 DFS에 분류되어 있어, DFS로 풀려했는데, 도저히 안돼서 플로이드 와샬로 품. #define MAX_INF 100000 #include #include #include using namespace std; int nGraph[101][101]; int N, M; void FloydWarshall() { for (int k = 1; k > M; int nFriend1, nFriend2; for (int i = 1; i > nFriend1 >> nFriend2; nGraph[nFriend2][nFriend1] = 1; nGraph[nFriend1][n..
플로이드 와샬(Floyd Warshall) 알고리즘
다익스트라 알고리즘처럼 최단 경로 구하는 알고리즘이다. 차이점은, 모든 정점에서 모든 정점으로의 최단 경로를 구한다는 것. --> 다익스트라 알고리즘은 따로 게시글을 포스트할 예정입니다. 플로이드 와샬 알고리즘은 기본적으로 '거쳐가는 정점'을 기준으로 알고리즘을 수행한다는 점. 그리고 플로이드 와샬 알고리즘은 기본적으로 다이나믹 프로그래밍 기술에 기반을 두고 있습니다. 코드를 보면, 초기 경로에 대한 값을 넣어 초기화해줍니다. INF는 무한 값을 대체한 값입니다. 3중 for문으로 구현해, 최단 경로에 대한 비용을 갱신합니다. #include int number = 4; int INF = 10000000; int a[4][4] = { {0, 5, INF, 8}, {7, 0, 9, INF}, {2, INF..
에라토스테네스의 체
에라토스테네스의 체는 대표적인 소수(prime) 판별 알고리즘이다. --> 지금까지 for문 돌려서 약수 있으면 break 하는식으로 했다. --> 더군다나 이 알고리즘은 중학교 수학에서 배울 수 있다고한다.. 먼저 언급했던 for문을 돌려 1과 본인을 제외한 약수가 있다면, break 하는 방법은 시간 복잡도 O(N)을 가지고 있다. 에라토스테네스의 체를 사용하면, O(N^(1/2))의 시간복잡도를 가진다고 한다. 에라토스테네스의 체의 중점은 특정한 숫자의 제곱근까지의 약수의 여부를 검증하는 방식이다. 에라토스테네스의 체를 구현하는 방법은, 1. 이차원 배열을 생성하여 값을 초기화. 2. 2부터 시작해서 특정 숫자의 배수에 해당하는 숫자들을 모두 지움. --> 지운다는 의미는 해당 배열의 값을 0으로 ..
백준 11724번: 연결 요소의 개수
문제 링크: https://www.acmicpc.net/problem/11724 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다. www.acmicpc.net 아이디어 : DFS 이것은 정점 기준으로 방문체크해주면서, Main 문에서 실행 한 DFS 카운트 횟수를 계산하는 것이 포인트. 의견 : BFS를 풀고 싶어서 찾은건데, DFS로 푸는 것이 맞다 생각했다. 그리고 DFS 기본 구현을 하면 풀 것 같다. #include #include using namespace st..