Category: Programming

0

Oracle 12c - Docker 로 시작하기

목차 Oracle - Docker 로 시작하기 Oracle 12c - Docker 로 시작하기 11g 제한사항Oracle 11g 의 경우 11G 제한이 걸려 있어서 부득이 하게 12c 로 변경 했다. 11g 가 11G 까지라서 11g 인건가….. SQL Error [12953] [72000]: ORA-12953: The request exceeds the maximum allowed database size of 11 GB 이미지 다운로드 Image : absolutapps/oracle-12c-ee docker pull absolutapps/oracle-12c-ee 이미지 실행하기

0

Oracle - Docker 로 시작하기

목차 Oracle - Docker 로 시작하기 Oracle 12c - Docker 로 시작하기 이미지 다운로드Oracle 의 경우 Mac 버전 데이터 베이스를 지원하지 않기 때문에 Docker 를 이용해 Oracle 를 이용해보려고 한다. Image : jaspeen/oracle-xe-11g docker pull jaspeen/oracle-xe-11g 이미지 실행하기docker run --name oracle11g -d -p 1521:1521 jaspeen/oracle-xe-11g# Docker Volumn 과 외부 Volumn 연결docker run --name oracle11g -d -p 1521:1521 -v ~/docker/oracle:/u01/app/oracle jaspeen/oracle-xe-11g Sqlplus 실행

0

프로그래머스 - 양궁 대회 (Python)

https://programmers.co.kr/learn/courses/30/lessons/92342 프로그래머스 - 키패드누르기 Cpp 프로그래머스 - 키패드누르기 Python 유의 사항 화살을 맞춘 개수를 저장하고 정렬하는데 있어서 주의해야 한다. 정렬에 대한 가중치가 앞자리가 아닌 뒷자리 에 있으므로 값을 저장할 때 뒤집어서 저장한 후 내림 차순으로 정렬해 가장 큰 값을 가져와 해당 값을 뒤집으면 가장 낮은 점수를 많이 맞춘 순서대로 정렬된 값을 가져올 수 있다. cases = []maxDiff: int = 0results = []def getScore(index: int): return 10 - indexdef calScores(ryan: list, apeech: list) -> None: diff: int = 0 apeech_score: int = 0 ryan_score: int = 0 global maxDiff for i in range(11): if apeech[i] == 0 and ryan[i] == 0: continue if ryan[i] > apeech[i]: ryan_score += getScore(i) else: apeech_score += getScore(i) diff = ryan_score - apeech_score if diff <= 0: return if diff >= maxDiff: oneCase: str = ''.join(list(map(str, ryan[::-1]))) if(diff > maxDiff): results.clear() maxDiff = diff results.append(oneCase)def makeAllCase(start: int, choice: int, n: int, ryan: list) -> None: if(choice >= n): cases.append(ryan.copy()) return for i in range(start, 11): ryan[i] += 1 makeAllCase(i, choice+1, n, ryan) ryan[i] -= 1def solution(n, info): answer = [] ryan = [0] * 11 makeAllCase(0, 0, n, ryan) for case in cases: calScores(case, info) if len(results) > 0: results.sort(reverse=True) answer = list(map(int, results[0][::-1])) # print(answer) else: answer.append(-1) return answer

0

백준 1197 - 최소 스패닝 트리 (Cpp)

링크 https://www.acmicpc.net/problem/1197 전체 소스 코드#include <algorithm>#include <iostream>#include <string>#include <vector>#define endl '\n';using namespace std;int find(int node, vector<int>& v) { if (node == v[node]) { return node; } return v[node] = find(v[node], v);}void merge(int a, int b, vector<int>& v) { if (a != b) { v[a] = b; }}int main(void) { int vertex, edge; int totalWeight = 0; cin >> vertex >> edge; vector<pair<int, pair<int, int>>> edges = vector<pair<int, pair<int, int>>>(vertex + 1); vector<int> v = vector<int>(vertex + 1); for (int i = 0; i < v.size(); i++) { v[i] = i; } for (int i = 0; i < edge; i++) { int from, to, weight; cin >> from >> to >> weight; edges.push_back({weight, {from, to}}); } sort(edges.begin(), edges.end()); for (auto we : edges) { int weight = we.first; pair<int, int> e = we.second; int from = e.first; int to = e.second; int setA = find(from, v); int setB = find(to, v); if (setA != setB) { totalWeight += weight; merge(setA, setB, v); } } cout << totalWeight << endl; return 0;}

0

Oracle - Clustering Factor

Oracle - Clustering Factor 데이터베이스에서는 특정 컬럼을 기준으로 같은 값을 갖는 데이터가 서로 모여있는 정도를 의미한다. 인덱스 클러스터링 팩터가 좋다. 고 하면 인덱스 정렬 순서 와 테이블 정렬 순서 가 서로 비슷하다는 것을 말한다. Index Scan의 Cost에 큰 영향을 준다. Index Lookup을 통해 Data를 읽는 일량을 결정한다.

0

백준 15650 - N 과 M (2) - 순열

백준 15650 - N 과 M (2) - 순열 Post not found: algorithm/baekjoon/경우의수/15649-N과M-cpp Post not found: algorithm/baekjoon/경우의수/15650-N과M-cpp 링크https://www.acmicpc.net/problem/2606 문제 풀이 주어진 N 개에서 M 개를 뽑는 경우의 수를 다루는 조합 문제 백트레킹 을 이용해 만들 수 있는 모든 경우의 수를 만들어 줬다. 다만, 조합은 순서와 상관 없이 뽑은 상태가 같으면 같은 Case 로 분류가 된다. 때문에 현재 뽑은 위치(idx) 에서 앞에 있는 것들만 뽑게 하면 같은 경우의 수가 나오는 것을 방지할 수 있다. 전체 소스 코드#include <iostream>#include <vector>#define endl '\n'using namespace std;vector<int> v;vector<bool> check;// idx : 수열 탐색 현재 시작 위치를 알려주기 위한 변수// depth : 재귀 문이 몇번 호출 됐는지 확인하기 위한 변수// n : 수열 탐색의 마지막 위치를 확인하기 위한 값// m : 재귀 문을 최대 호출할 수 있는 횟수void nCr(int idx, int depth, int n, int m) { if (depth == m) { for (int value : v) { cout << value << " "; } cout << endl; return; } for (int i = idx; i < n; i++) { if (check[i] == true) { continue; } check[i] = true; v[depth] = i + 1; nCr(i + 1, depth + 1, n, m); check[i] = false; }}int main(void) { cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false); int n, m; cin >> n >> m; v = vector<int>(m); check = vector<bool>(n); nCr(0, 0, n, m); return 0;}

0

백준 15649 - N 과 M (1) - 순열

백준 15649 - N 과 M (1) Post not found: algorithm/baekjoon/경우의수/15649-N과M-cpp Post not found: algorithm/baekjoon/경우의수/15650-N과M-cpp 링크https://www.acmicpc.net/problem/2606 문제 풀이 주어진 N 개에서 M 개를 뽑아 나열하는 순열 문제. 백트래킹 을 이용해 만들 수 있는 모든 수열의 경우의 수 를 만들어 준다. check 를 이용해 똑같은 숫자를 여러 번 뽑는 중복 행위를 판단하고 v 배열을 통해 한 수열이 만들어지면 출력하도록 한다. v : 뽑은 숫자를 저장하기 위한 배열 check : 해당 숫자가 뽑혔는지 판단하기 위한 배열 전체 소스 코드

0

백준 1012 - 유기농 배추 (Python)

백준 1012 - 유기농 배추 (Python)링크https://www.acmicpc.net/problem/2606 전체 소스 코드def bfs(y, x): q = [] q.append([y, x]) check[y][x] = True while q: cntY, cntX = q.pop() for i in range(4): ny = cntY + dy[i] nx = cntX + dx[i] if 0 > ny or ny >= col or 0 > nx or nx >= row: continue if check[ny][nx] == False and field[ny][nx] == 1: q.append([ny, nx]) check[ny][nx] = Truetest_case = int(input())row = 0col = 0k = 0field = []check = []dy = [1, -1, 0, 0]dx = [0, 0, 1, -1]for t in range(test_case): row, col, k = map(int, input().split()) field = [[0] * row for _ in range(col)] check = [[False] * row for _ in range(col)] count = 0 for i in range(k): x, y = map(int, input().split()) field[y][x] = 1 for i in range(col): for j in range(row): if check[i][j] == False and field[i][j] == 1: count += 1 bfs(i, j) print(count)

0

백준 2606 - 바이러스 (Python)

백준 2606 - 바이러스 (Python)링크https://www.acmicpc.net/problem/2606 전체 소스 코드def bfs(start_node): q = [] q.append(start_node) check[start_node] = True count = 0 while q: node = q.pop(0) for i in range(1, node_num+1): if check[i] == False and field[node][i] == 1: q.append(i) count += 1 check[i] = True return countnode_num = int(input())line_num = int(input())field = [[0]*(node_num+1)for i in range(node_num+1)]check = [False]*(node_num+1)for i in range(line_num): a, b = map(int, input().split()) field[a][b] = 1 field[b][a] = 1print(bfs(1))

0

백준 2606 - 단지번호 붙이기 (Python)

백준 2667 - 단지번호 붙이기 (Python)링크https://www.acmicpc.net/problem/2667 전체 소스 코드def bfs(y, x): q = [] q.append([y, x]) check[y][x] = True count = 0 while len(q) > 0: count += 1 cntY = q[0][0] cntX = q[0][1] q.pop(0) for i in range(4): ny = cntY + dy[i] nx = cntX + dx[i] if 0 > ny or ny >= n or 0 > nx or nx >= n: continue if check[ny][nx] == False and field[ny][nx] != 0: check[ny][nx] = True q.append([ny, nx]) values.append(count)dy = [1, -1, 0, 0]dx = [0, 0, 1, -1]n = int(input())color = 0values = []check = [[False] * n for i in range(n)]field = [[0] * n for i in range(n)]for i in range(n): line = input() for j in range(len(line)): field[i][j] = int(line[j])for i in range(n): for j in range(n): if check[i][j] == False and field[i][j] != 0: color += 1 bfs(i, j)values.sort()print(color)for i in values: print(i)

0

MySQL - 사용자 생성

MySQL - 사용자 생성show databases; use mysql; 계정 생성 쿼리-- 내부에서만 사용할 계정 생성CREATE USER '계정 아이디'@'localhost' IDENTIFIED BY '비밀번호';-- 외부에서 사용할 계정 생성CREATE USER '계정 아이디'@'%' IDENTIFIED BY '비밀번호'; 권한 부여-- GRANT ALL PRIVILEGES ON *.* TO '계정 아이디'@'%';flush privileges;quit$$ CREATE DATABASE study_db default CHARACTER SET UTF8;

0

프로그래머스 - 양궁 대회 (Cpp)

https://programmers.co.kr/learn/courses/30/lessons/92342 프로그래머스 - 키패드누르기 Cpp 프로그래머스 - 키패드누르기 Python 유의 사항 화살을 맞춘 개수를 저장하고 정렬하는데 있어서 주의해야 한다. 정렬에 대한 가중치가 앞자리가 아닌 뒷자리 에 있으므로 값을 저장할 때 뒤집어서 저장한 후 내림 차순으로 정렬해 가장 큰 값을 가져와 해당 값을 뒤집으면 가장 낮은 점수를 많이 맞춘 순서대로 정렬된 값을 가져올 수 있다. #include <bits/stdc++.h>using namespace std;int max_diff = -1;vector<string> scores;int getValue(int idx) { return 10 - idx;}void calScore(vector<int> apeach, vector<int> ryan) { int diff = 0; int total_apeach = 0; int total_ryan = 0; for (int i = 0; i < 11; i++) { if (apeach[i] == 0 && ryan[i] == 0) { continue; } if (apeach[i] >= ryan[i]) { total_apeach += getValue(i); } else { total_ryan += getValue(i); } } if (total_ryan > total_apeach) { diff = total_ryan - total_apeach; } else { return; } string str; for (int i : ryan) { str += i + '0'; } reverse(str.begin(), str.end()); if (diff > max_diff) { max_diff = diff; scores.clear(); scores.push_back(str); } else if (diff == max_diff) { scores.push_back(str); }}void back_tracking(int depth, int idx, int n, vector<int>& apeach, vector<int>& ryan) { if (idx > 10) { return; } if (depth == n) { calScore(apeach, ryan); return; } ryan[idx] += 1; back_tracking(depth + 1, idx, n, apeach, ryan); ryan[idx] -= 1; back_tracking(depth, idx + 1, n, apeach, ryan);}vector<int> solution(int n, vector<int> info) { vector<int> answer; vector<int> ryan = vector<int>(11, 0); back_tracking(0, 0, n, info, ryan); if (max_diff == -1) { answer.push_back(-1); } else { sort(scores.begin(), scores.end(), greater<string>()); string str = scores[0]; reverse(str.begin(), str.end()); for (int i = 0; i < str.size(); i++) { answer.push_back(str[i] - '0'); } } return answer;}

0

프로그래머스 - 주차 요금 계산

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/92341 프로그래머스 - 주차 요금 계산 import mathlimit = 23*60 + 59def time_to_minute(time): times = list(map(int, time.split(':'))) return times[0] * 60 + times[1]def calCost(base_time, base_fee, per_time, per_fee, interval): if base_time > interval: return base_fee return base_fee + math.ceil((interval-base_time)/per_time)*per_feedef solution(fees, records): answer = [] fees = list(map(int, fees)) base_time = fees[0] base_fee = fees[1] per_time = fees[2] per_fee = fees[3] dict = {} time_dict = {} fee_dict = {} for line in records: words = line.split(' ') time = time_to_minute(words[0]) car_number = words[1] in_out = words[2] if in_out == 'IN': dict[car_number] = [time] else: dict[car_number].append(time) in_out_times = dict[car_number] if car_number in time_dict: time_dict[car_number] += (in_out_times[1] - in_out_times[0]) else: time_dict[car_number] = (in_out_times[1] - in_out_times[0]) for key, value in dict.items(): if len(value) == 1: if key in time_dict: time_dict[key] += (limit - value[0]) else: time_dict[key] = (limit - value[0]) for key, value in time_dict.items(): fee = calCost(base_time, base_fee, per_time, per_fee, value) if key in fee_dict: fee_dict[key] += fee else: fee_dict[key] = fee soredDict = sorted(fee_dict.items()) for value in soredDict: answer.append(value[1]) return answer

0

프로그래머스 - K진수에서 소수 구하기 Python

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/92335 프로그래머스 - K진수에서 소수 구하기 Python def is_prime(value): if value <= 1: return False for i in range(2, int(value**0.5)+1): if value % i == 0: return False return Truedef solution(n, k): answer = 0 str_value = '' stack = [] while n > 0: stack.append(n % k) n = n//k while len(stack) > 0: str_value += str(stack.pop()) sub_strs = str_value.split('0') for i in sub_strs: if i == '': continue if is_prime(int(i)): answer += 1 return answer

0

프로그래머스 - 신고 결과 받기 Cpp

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/92334 프로그래머스 - 신고 결과 받기 Cpp 프로그래머스 - 신고 결과 받기 Python #include <bits/stdc++.h>using namespace std;vector<string> split(string line) { vector<string> v; int point = 0; for (int i = 0; i < line.size(); i++) { if (line[i] == ' ') { point = i; break; } } v.push_back(line.substr(0, point)); v.push_back(line.substr(point + 1)); return v;}vector<int> solution(vector<string> id_list, vector<string> report, int k) { vector<int> answer = vector<int>(id_list.size(), 0); map<string, set<string>> m; for (string line : report) { vector<string> v = split(line); string id = v[0]; string report_id = v[1]; m[v[1]].insert(v[0]); } for (auto iter = m.begin(); iter != m.end(); iter++) { if (iter->second.size() >= k) { set<string>& s = iter->second; for (auto s_iter = s.begin(); s_iter != s.end(); s_iter++) { int index = find(id_list.begin(), id_list.end(), *s_iter) - id_list.begin(); answer[index]++; } } } return answer;}