본문 바로가기

전체 글

(426)
[iOS] Firebase Firebase 본 문서에서는 Firebase라는 서비스가 무엇인지 그리고 어떠한 기능을 제공하는지에 대해 살펴본 내용을 정리하도록 한다. Firebase란 Firebase는 구글이 인수하여 서비스하고 있는 대표적인 BaaS(Backend as a Service)다. 과거 모바일 앱의 서버를 개발하기 위해서는 인증, 데이터베이스, 푸시 알람, 스토리지 ,API등 모든것을 개발해야 했다. 이러한 반복적인 작업을 앱을 개발할 떄 마다 하는 것은 엄청난 시간낭비다. Firebase는 이러한 불편한 점을 해소해주는 서비스다. 따라서, Firebase란 서비스를 구축하기 위한 서버 인프라 구축, 서버단 세팅 등을 고민하지 않고 클라이언트 단의 작업만 진행하여 서비스를 제작할 수 있도록 돕는 서비스다. Fireba..
[iOS] Dive in Closure Dive in Closure 본 문서에서는 알다가도 모르겠는 Closure에 대하여 확실히 알아보도록 한다. 클로저란 우리는 함수를 정의할떄 func 이라는 키워드를 이용해 정의해왔다. 클로저는 함수와 동일한 기능을 하되, func키워드와 함수명이 없는 함수이다. 흔히들 익명함수라고 부르기도 한다. 클로저의 기본 문법에 대해 먼저 살펴보도록 하자. { (parameters) -> Return Type in body } () 사이에 인자를 받고 ->를 통해 반환 타입을 명시한다. 이후 in 키워드 뒤에 나오는 부분이 실행할 코드를 기재하는 클로저의 몸체 부분이다. Func vs Closure 함수와 클로저의 차이점에 대해 간단히 살펴보도록 한다. Function func 키워드를 통해 정의한다. 이름을 갖..
[Algorithm] [Python] Programmers - 주식가격 Programmers - 주식가격 문제 설명 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,000 이하인 자연수입니다. prices의 길이는 2 이상 100,000 이하입니다. 제출 코드 1차 제출 코드 def solution(prices): answer = [[0] for _ in range(len(prices))] for i in range(len(prices)): cnt = 0 for j in range(i+1, len(prices)): if prices[i] prices[j]: break return answer 기존 1차 ..
[Algorithm] [Python] 백준/BOJ - 11724 _ 연결 요소의 개수 11724 - 연결 요소의 개수 문제 방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주어진다. 출력 첫째 줄에 연결 요소의 개수를 출력한다. 제출 코드 import sys sys.setrecursionlimit(10000) def dfs(node): visited[node] = True for i in adj[node]: if not visited[i]: dfs(i) # n : 정점 ..
[Python] 인접 행렬과 인접 리스트 인접 행렬 & 인접 리스트 그래프에 대한 이해가 부족하다고 느껴 다시 공부를 진행하고 있다, 본 문서에서는 그래프를 코드로 구현하는 방법에 대하여 기재한다 알고리즘 문제를 접하다보면 Graph 문제를 심심치 않게 접할 수 있다. 이러한 문제들을 풀때는 현재 그래프의 모습을 모델링한 이후 푸는것이 일반적이다. 이 때 , 모델링한 그래프의 연결관계를 나타내는 방법은 크게 두가지로 나뉜다. 1. 인접 행렬 2. 인접 리스트 위 두가지 방법에 대해 순차적으로 살펴보도록 한다. 1. 인접 행렬 인접 행렬이란, 이름 그대로 그래프의 연결 관계를 행렬로 표현하여 이차원 배열로 나타내는 방식을 의미한다. 인접 행렬 adj[i][j] 을 아래와 같이 정의할 수 있다. adj[i][j] : 노드 i에서 j로 가는 간선이 ..
[Python] 선택 정렬, 거품 정렬, 삽입 정렬, 퀵 정렬, 병합 정렬 정렬 - Sort 선택 정렬 - Selection Sort 설명 선택 정렬 알고리즘은 정렬되어 있지 않은 데이터 중 가장 작은 데이터를 선택하여 맨 앞부터 순서대로 정렬해 나아가는 알고리즘이다. 선택 정렬은 정렬된 값을 배열의 맨 앞부터 하나씩 채워나가게 된다. 따라서, 뒤 index 로 갈수록 비교 범위가 1씩 감소한다는 특성을 갖는다. 입력 배열이 이미 정렬되어 있거나 말거나 상관없이 동일한 연산량을 갖기 때문에 최적화의 여지가 적어 성능이 떨어지는 편이다. 루프문을 통해 모든 인덱스에 접근해야 하기 때문에 기본적으로 O(N) 시간을 소모하며, 최소값을 찾으면 현재 인덱스와 최소값을 서로 swap해야 하기 때문에 O(N) 시간을 필요로 하게 된다. 오름차순 정렬 기준으로 최소값을 찾기 위해 비교는 여..
[Algorithm] [Python] 백준/BOJ - 1929 _ 소수 구하기 1929 - 소수 구하기 문제 설명 M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. 출력 한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다. 제출 코드 1차 제출 코드 from sys import stdin def isPrime(x): if x < 1: return False else: for i in range(2, x+1): if x % i == 0: return False return True m,n = map(int, stdin.readline().split()) for i in range(m, n+1): if isPr..
[Algorithm] [Python] 백준/BOJ - 1373 _ 2진수 8진수 1373 - 2진수 8진수 문제 설명 2진수가 주어졌을 때, 8진수로 변환하는 프로그램을 작성하시오. 입력 첫째 줄에 2진수가 주어진다. 주어지는 수의 길이는 1,000,000을 넘지 않는다. 출력 첫째 줄에 주어진 수를 8진수로 변환하여 출력한다. 제출 코드 1차 제출 코드 from sys import stdin binary_List = list(map(int, stdin.readline().strip()))[::-1] total = 0 res = [] for i in range(len(binary_List)): total += binary_List[i] * (2 ** i) while True: if total == 0: print(*res[::-1], sep=&#39;&#39;) break mok =..