1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def dist_bfs(adj_matrix):
    from collections import deque
    visited = set()
    queue = deque([1])
    dist_list = [50001 for x in range(len(adj_matrix))]
    dist_list[0= 0
    
    while queue:
        node = queue.popleft()
        if node not in visited:
            visited.add(node)
            queue += adj_matrix[node] - visited
            for x in adj_matrix[node]:
                dist_list[x-1= min(dist_list[x-1], dist_list[node-1]+1)
    return dist_list
 
def solution(n, edge):
    adj_matrix = {key : set() for key in range(1,n+1)}
    for a,b in edge:
        adj_matrix[a].add(b)
        adj_matrix[b].add(a)
    dist_list = dist_bfs(adj_matrix)
    
    max_dist = max(dist_list)
    answer = 0
    for x in dist_list:
        if x == max_dist:
            answer += 1
    return answer
cs

여기서 주의해야할 점은 매우 빈번히 연산되는 visited를 set으로 해야한다는 점이다.

파이썬 내부적으로 list가 set보다 iteration에서는 빠르지만

탐색(in함수)에서는 set이 훨씬 빠르다.

부산대학교 학식에서 원하는 메뉴(소세지 야채 볶음 등) 혹은 원하는 키워드가 등장하면

카카오톡 알림을 주는 토이 프로젝트를 구현하려고 합니다.

기술 스펙은 다음과 같습니다.

-구동사양 : 라즈베리4 4GB

-주 언어 : python

모두들 python에 익숙한 상태여서 러닝커브가 없는 파이썬을 선택하였습니다.

-프레임워크 : Flask

라즈베리파이에서 간단한 웹서버를 돌리기 위해 러닝커브가 적은 Flask를 선택하였습니다.

-데이터베이스 : PostgreSQL

이렇게 간단한 프로젝트는 txt파일로 메뉴를 관리해도 되지만 데이터베이스도 건드려보자! 싶어서 찾아보았습니다.

다양한 데이터베이스가 있었지만 대용량 트랜잭션에도 안정적이라 평가받는 postgreSQL을 선택하였습니다.

한국어로 된 좋은 자료가 없어서(제가 못찾아서...)

https://youtu.be/qw--VYLpxG4

이 자료를 이용하여 공부하였습니다.

쉬운 영어로 제작되어서 듣는데 거북함은 없을거에요^^

- 데이터베이스 연결도구 : sqlalchemy

psycopg2와 sqlalchemy 둘 다 쓸 수 있었지만

판다스를 통해서 데이터베이스를 불러오는 기능 중 read_sql_table을 쓸 수 있는 sqlalchemy를 선택하였습니다.

어차피 둘다 연결도구로만 쓰고 판다스의 read_sql만 사용할 수 있어서

기능이 한개라도 많은 녀석을 사용하는 것이 더 나았습니다.

-기타 : 카카오톡 플러스친구와 챗봇 신청

 

이제부터 쓰는 글은 위 기술 스택을 공부했다는 가정하에 적겠습니다.

def compute_gcd(num1, num2):
    if num1%num2 == 0:
        return num2
    return compute_gcd(num2, num1 % num2)

def fillingprime(N):	#에라토네스의 체~N
    raw = set([x for x in range(N+1)])
    raw -= set(range(0,2))
    for i in range(2, int(max(raw)**0.5)+1):
        raw -= set(range(i*2, max(raw)+1, i))
    return list(raw)​
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
#include <cstdlib>

using namespace std;

int main() {
	cin.tie(NULL);
	cout.tie(NULL);
	ios_base::sync_with_stdio(false);
}


vector<long long> prime;

void fillingPrime(long long N) {
	vector<int> raw(N + 1);

	for (int i = 2; i < N; i++) {
		raw[i] = i;
	}
	for (long long i = 2; i*i < N; i++) {	//에라토네스의 체
		if (raw[i] == 0)	continue;
		for (int j = i + i; j < N; j += i) {
			raw[j] = 0;
		}
	}
	for (int i = 2; i < N; i++) {
		if (raw[i] != 0)
			prime.push_back(raw[i]);
	}
}
vector<long long> split(string& s, char delimiter) {
	vector<long long> int_tokens;
	string token;
	istringstream tokenStream(s);
	while (getline(tokenStream, token, delimiter)) {
		stringstream ss(token);	//each element, string to int
		long long n;
		ss >> n;
		int_tokens.push_back(n);
	}
	return int_tokens;
}

+ Recent posts