프로그래밍(7)
-
[Spark] SparkSQL 개념 및 코드
SparkSQL Structured Data를 다루기 위해 Spark에서도 SQL문을 쓸 수 있게 했다. 1. Structured Data와 Unstructured Data의 차이점은 무엇이고 2. 왜 RDD가 아닌 Structured Data를 써야 하며 3. Spark에서 SQL문을 어떻게 쓸 수 있을까? 포스팅을 읽어가며 질문을 해소해보자. "본 포스팅은 패스트캠퍼스의 강의를 듣고, 정리한 자료임을 밝힙니다." Structured Data vs Unstructured Data Unstructured Data : free form - 로그 파일 - 이미지 말 그대로 free form. 자유로운 형식의 데이터다. 이미지가 될 수도 있고, 하나의 스트링이 될 수 있다. 이런 데이터들을 정제하여 Struc..
2022.05.06 -
[Algorithm] 누적 합(Prefix sum) 알고리즘 개념 및 코드
누적 합 Prefix sum 이번 포스팅에선 누적 합 알고리즘을 살펴보겠다. 꽤 간단하지만 알고리즘이지만, 의외로 모르는 사람이 꽤 있다. Let's Go 다음과 같은 문제가 있다. n_list = [n for n in range(1, 100)] 50번째부터 - 80번째까지의 수를 더한 값을 리턴하라. 누적 합 알고리즘을 사용하지 않는다면? 단순히 리스트를 50번째부터 80번째까지 뽑아서 계산하는 방식을 가장 먼저 떠올릴 것이다. 코드로 표현하면 다음과 같다. sum(n_list[49:79]) 겉으론 문제가 없어 보이지만, 누적 합을 구하라는 요청이 많아지면 상황이 달라진다. import time n_list = [n for n in range(1, 10000)] start = time.time() fo..
2022.05.04 -
[BOJ] # 9184: 신나는 함수 실행
문제 재귀 호출만 생각하면 신이 난다! 아닌가요? 다음과 같은 재귀 함수 w(a, b, c)가 있다. if a 20, then w(a, b, c) returns: w(20, 20, 20) if a < b and b < c, then w(a, b, c) returns: w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c) otherwise it returns: w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1) 위의 함수를 구현하는 것은 매우 쉽다. 하지만, 그대로 구현하면 값을 구하는데 매우 오랜 시간이 걸린다. (예를 들면, a=15, b=15, c=15) a, b, c가 주어졌을 때, w(a, b, c)를 출..
2022.05.03 -
[BOJ] # 1003번: 피보나치 함수
문제 다음 소스는 N번째 피보나치 수를 구하는 C++ 함수이다. int fibonacci(int n) { if (n == 0) { printf("0"); return 0; } else if (n == 1) { printf("1"); return 1; } else { return fibonacci(n‐1) + fibonacci(n‐2); } } fibonacci(3)을 호출하면 다음과 같은 일이 일어난다. fibonacci(3)은 fibonacci(2)와 fibonacci(1) (첫 번째 호출)을 호출한다. fibonacci(2)는 fibonacci(1) (두 번째 호출)과 fibonacci(0)을 호출한다. 두 번째 호출한 fibonacci(1)은 1을 출력하고 1을 리턴한다. fibonacci(0)은 ..
2022.05.02 -
[BOJ] # 2609번: 최대공약수와 최소공배수
문제 두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000 이하의 자연수이며 사이에 한 칸의 공백이 주어진다. 출력 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. CODE import sys a, b = map(int, sys.stdin.readline().split()) def multiply(arr): ans = 1 for n in arr: ans *= n return ans def small_num(i): d = 2 i_list = [] while i > 1: if i % d == 0: i = i / d i_list.append(d..
2022.05.02 -
[BOJ] # 1037번: 약수
문제 양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되지 않는다. 출력 첫째 줄에 N을 출력한다. N은 항상 32비트 부호 있는 정수로 표현할 수 있다. 코드 import sys n = int(sys.stdin.readline()) n_list = list(map(int, sys.stdin.readline().split())) m = min(n_list) x = max(n_l..
2022.05.02