오늘은 작년부터 조금씩 만들어온 사이드 프로젝트가 있는데 한번 소개 해보려고 합니다. 작년 12월부터 띄엄 띄엄.. 만들기 시작했고, 지금은 프로젝트를 업그레이드하여 버전 2.0을 만들고 있는 중입니다. 프로젝트 소개 제가 만든 프로젝트는 카카오 코로나 알리미라는 프로젝트입니다. 카카오 코로나 알리미는 카카오톡을 통해서 코로나 관련 정보를 볼 수 있는 서비스 입니다. 코로나 라이브라는 아주 좋은 서비스가 있지만, 사람들이 카카오톡을 자주 이용하기 때문에 카카오톡 안에 코로나와 관련된 정보를 알려줄 수 있는 서비스를 만들면 좋을 것 같아서 시작하게 됐습니다. 프로젝트 기능 제가 만든 챗봇에는 크게 3가지의 기능이 있습니다. 0시 기준 총 확진자 및 관련 정보들 질병관리청에서 매일 오전에 전날의 확진자 및 ..
백준 1010번 다리 놓기 백준 1010번 다리 놓기 설명 itertools 모듈의 combinations 함수는 너무 느려서 math모듈의 comb 함수를 활용했다. 코드 import sys from math import comb # 조합을 위한 math comb 모듈 input = sys.stdin.readline class Solution: def get_bridge(self, N: int, M: int): # mCn을 반환 return comb(M, N) for _ in range(int(input())): N, M = map(int, input().split()) print(Solution().get_bridge(N, M))
백준 4256번 트리 백준 4256번 트리 설명 전위 순회는 가운데, 왼쪽, 오른쪽으로 가기 때문에 첫번째 값이 가운데 노드이므로 이 노드를 중위 순회에 적용하여 중위 순회를 가운데 노드 기준으로 왼쪽, 오른쪽으로 나누는 분할 정복 형태로 문제를 풉니다. 이렇게 트리를 만들고, 후위 순회로 찍어줍니다. 코드 import sys from typing import List input = sys.stdin.readline # 트리 구조체 선언 class TreeNode: def __init__(self, x, left=None, right=None): self.x = x self.left = left self.right = right class Solution: def tree(self, preorder: L..
백준 13305번 주유소 백준 13305번 주유소 코드 import sys from typing import List input = sys.stdin.readline class Solution: def gas_station(self, N: int, road: List[int], price: List[int]): answer = 0 # 첫번째 주유가격을 저장 money = price[0] for i in range(N-1): # 이전 주유가격보다 더 싼게 나오면 money를 갱신 if price[i] < money: money = price[i] # 그때그때마다 money와 도로를 곱해서 계산해준다. answer += money * road[i] return answer N = int(input()) lo..
백준 1072번 게임 백준 1072번 게임 설명 퍼센트 구할 때 100을 먼저 곱하고 나눠야지 정확하다. 코드 import sys input = sys.stdin.readline class Solution: def game(self, x: int, y: int): # 처음 x, y 퍼센트 percent = int(y*100/x) # 범위 전체로 해서 이분 탐색 start, end = 1, 1000000000 while start < end: mid = (start + end) // 2 # x, y에 mid를 각각 더해서 퍼센트를 구하고, # 처음 x, y의 퍼센트와 비교한다. cur = int((y+mid)*100/(x+mid)) if cur percent else -1 X, Y = map(int, in..
백준 2343번 기타 레슨 백준 2343번 기타 레슨 코드 import sys, math from typing import List input = sys.stdin.readline class Solution: def guitar_lesson(self, N: int, M: int, lesson: List[int]): # 블루레이의 크기로 이분 탐색 # 레슨을 블루레이에 한개씩만 담는다고 했을 때 최소 값을 알 수 있음 # 레슨의 길이중 가장 큰 값이 블루레이의 최소 값이 된다. # 레슨을 싹다 담았을 때가 최대 값 start, end = max(lesson), sum(lesson) answer = sys.maxsize while start mid: count += 1 total = 0 total += le..
개념 자신의 레포지토리를 clone해서 서버로 push하는 경우 그 레포지토리는 origin이라고 할 수 있습니다. 하지만 오픈소스 협업 구조에서는 서버에 있는 레포지토리가 항상 2개 이상(fork를 해서)이라고 볼 수 있습니다. 메인 프로젝트의 레포지토리를 upstream이라고 하고, fork한 자신의 레포지토리를 origin이라고 합니다. 여기서 자신만 commit을 해서 기여하는 것이 아니라 다른사람도 똑같이 clone 및 fork를 해서, pull request를 요청 할 수 있습니다. 그렇기 때문에 본인이 fork해서 commit까지 한 뒤 merge하기 전, 그 시간동안 다른 개발자가 같은 곳에 commit을 하고, merge가 됐으면 충돌이 발생할 수 있습니다. 이때는 어떻게 대응해야 할까요..
백준 14503번 로봇 청소기 백준 14503번 로봇 청소기 코드 import sys from typing import List input = sys.stdin.readline class Solution: def vacuum_cleaner(self, N: int, M: int, r: int, c: int, d: int, board: List[List[int]]): """북, 동, 남, 서 순으로 d가 0, 1, 2, 3 이므로 이걸 인덱스로 해서 x, y 좌표를 만든다.""" x, y = (-1, 0, 1, 0), (0, 1, 0, -1) """빈칸이면 0, 벽이면 1, 청소했으면 2""" board[r][c] = 2 # 처음 값을 청소한 걸로 answer = 1 while True: check = Fa..