웹 개발 중에 Bootstrap과 같은 디자인 라이브러리를 사용하면 쉽게 웹 레이아웃을 만들 수 있다. React Native에도 이와 같이 비슷한 디자인 라이브러리가 있다. 여러가지 라이브러리가 있지만, 본 글에서는 React Native Elements 라이브러리를 적용해본다. React Native Elements 적용하기 프로젝트 생성에 대한 코드는 간략히 적는다. $ react-native init Corona $ cd Corona 상세한 내용은 2020/05/19 - [React Native] - React Native 프로젝트 생성하기를 참고한다. 1. react-native-elements 설치 # yarn $ yarn add react-native-elements # 또는 npm 에서는 ..
React Native React Native는 Facebook에서 만든 오픈 소스 모바일 애플리케이션 프레임 워크이다. React를 사용하여 Android, iOS, WEB과 같이 애플리케이션을 개발할 수 있다. 그중에서 모바일(iOS, Andorid)은 React Native를 이용한다. 그리고, iOS와 Android 동시에 개발이 가능하여 하이브리드 앱 개발이라고 부르기도 한다. 프로젝트 생성 사전에 yarn 또는 npm이 설치되어 있어야 함 react-native-cli 설치 $ yarn global add react-native-cli react-native 프로젝트 생성 (코로나가 유행해서 프로젝트 이름을 Corona로 해봤다) $ react-native init Corona 컴퓨터 사양마다..
SPA SPA는 Single Page Application의 약자로, 한국말로 단일 페이지 애플리케이션이라고 할 수 있다. SPA는 서버로부터 페이지를 불러오지 않고 현재의 페이지를 동적으로 다시 작성하는 Application을 말한다. 전체 페이지를 렌더링 하지 않고, 바뀐 부분만 렌더링 하기 때문에 (전체 렌더링보다) 효율적이라고 할 수 있다. 또한 새로고침하지 않기 때문에 사용자에게 좀 더 데스크톱 애플리케이션을 사용하는 기분이 들게 해 준다. SPA는 초기에 정적 리소스를 한 번에 가져오기 때문에 초기 로딩 속도는 더 느릴 수 있다. 하지만, SPA 기반의 서비스는 대체적으로 웹 페이지보단 애플리케이션 서비스에 가깝기 때문에 큰 단점이라고 할 순 없다. SPA 만들기 SPA 서비스를 만들려면 어떻..
문자열 개수 찾기 문자열의 개수를 찾을 때는 str 의 count() 메소드를 이용한다. greet = "Hello, World!" print("`o` count:", greet.count("o")) print("`l` count:", greet.count("l")) `o` count: 2 `l` count: 3 문자열이 있는지 확인 str 의 find() 메소드를 이용한다. find() 메소드는 찾는 문자열이 있는 경우, 찾은 문자열의 첫번째 인덱스 값을 반환한다. 찾은 문자열이 여러개인 경우 첫번째 문자열의 첫번째 인덱스를 반환한다. 찾는 문자열이 없는 경우, -1 을 반환한다. greet = "Hello, Python" print(greet.find("Python")) # 찾은 문자열의 첫번째 인덱..
결론부터 얘기하면 병행성: 동시에 실행되는것 처럼 보인다. 병렬성: 실제로 동시에 실행이 된다. 병행성(Concurrency) 병행성(Concurrency)은 동시성이라고 부르기도 함 논리적인 개념 (프로그램 성질) 보통 싱글 코어에서 멀티 스레드를 동작시키기위해 사용. 하지만, 멀티 코어에서도 실행이 가능하다. (싱글, 멀티 코어 둘 다 실행 가능) 보기에는 스레드들을 동시에 병렬적으로 실행하는 것처럼 보이지만, 사실은 번갈아가면서 실행을 시켜 동시에 실행되는것처럼 보이게 함 병렬성(Parallelism) 병렬성은 실제로 동시에 실행 물리적인 개념 (하드웨어 성질) 멀티코어에서 멀티 스레드를 동작시킴 (멀티코어에서만 실행 가능) 병렬성은 데이터 병렬성(Data Parallelism), 작업 병렬성으로 ..
파이썬의 정책에 의해 멀티 스레드 방식으로 프로그램을 구현하더라도, (번갈아가면서) 하나의 스레드만 실행하게된다. 그래서, 파이썬에서는 멀티 스레드를 통해 원하던 효과를 제대로 볼 수 없다. 아래 GIL에 의해서 하나의 스레드만 실행이 된다. GIL(Global Interpreter Lock)? 파이썬은 모든 자원을 하나의 스레드에서 컨트롤할 수 있게 글로벌 락(Global Lock)을 걸어둔다. GIL 은 하나의 스레드(Thread)에게 모든 자원(Resource)을 점유할 수 있게 해준다. (다른 스레드는 Acquire 할 수 없음) 그렇다고 스레드가 쓸모없는 것은 아니다. 하나의 스레드가 I/O 작업을 하는 동안은 다른 스레드가 점유할 수 있다. I/O 작업이 없는 프로그램이라면, 멀티 스레드 방식..
docker compose docker 컨테이너를 실행할때 docker run 명령어를 사용한다. 여러개의 컨테이너를 실행 시킬때, 매번 docker run 명령어를 여러번 실행 하는것을 번거롭다. 이때, 도커 컴포즈(docker compose) 를 사용하면 편한다. docker compose 는 일괄적으로 컨테이너를 실행하고 중지시킬 수 있다. (많은 컨테이너를 관리할때 편리함) 참고 docker compose 에서는 컨테이너를 서비스(services) 라고 부른다. 컴포즈를 이용하여 서비스를 띄울때, docker-compose.yml 파일을 작성해야 한다. docker-compose.yml 작성 version: "3.7" services: jenkins: container_name: jenkins i..
1. 파일 다루기 파이썬에서는 파일을 다룰때, open() 메소드를 사용한다. 1.1. 파일 쓰기 파일을 쓸 때는 "w" (Write) 를 사용한다. (아래 코드 참고) dest = "/Users/taehongkim/Desktop/test.txt" try: f = open(dest, "w") # 파일을 쓸 때는 "w" 옵션을 사용한다. f.write("Hello, World!") # 파일의 내용 finally: f.close() # 작업이 끝나면 `close()` 를 통해 리소스를 해제해준다. close() 메소드를 통해 파일 리소스를 해제해준다. 파일을 작성하는 도중 오류가 발생할 가능성이 있기 때문에 try-finally 를 이용하여 close() 가 반드시 실행될 수 있도록 한다. 위 방법처럼 작성..
본 문제는 KAKAO 2020 블라인드 코딩 테스트 문제 중에 `문자열 압축` 문제이다. 문제 문제를 보려면 아래 `더보기`를 누르면 된다. 더보기 데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습니다. 간단한 예로 aabbaccc의 경우 2a2ba3c(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는데, 이러한 방식은 반복되는 문자가 적은 경우 압축률이 낮다는 단점이 있습니다. 예를 들면, abcab..
본 문제는 백준 알고리즘(https://www.acmicpc.net/)에게 있습니다. 문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 고른 수열은 오름차순이어야 한다. 예제 # 입력 4 2 # 출력 1 2 1 3 1 4 2 3 2 4 3 4 # 입력 4 4 # 출력 1 2 3 4 Coding - Python3 기본 순열 문제에서 코드 몇개만 수정하면 된다. 참고. 기본 순열 문제 2020/04/03 - [Algorithm/Beakjoon] - 백준 Ex.15649번 - N과 M(1) 순열 문제 (with Python3) 백준 Ex.15649번 - N과 M(1) 순열 문제 (with ..
본 문제는 백준 알고리즘(https://www.acmicpc.net/)에게 있습니다. 문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 예제 # 입력 3 1 # 출력 1 2 3 # 입력 4 2 # 출력 1 2 1 3 1 4 2 1 2 3 2 4 3 1 3 2 3 4 4 1 4 2 4 3 Coding - Python3 대표적인 순열 문제로 푸는 방식만 익히면 쉽게 문제를 풀 수 있다. for 문을 이용하는 방식과 재귀함수를 이용하는 방식이 있는데, 재귀 함수로 푸는것이 이해하기 쉽다. 아래 코드는 stack 과 재귀 함수를 이용하여 문제를 풀었다. # -*- coding: utf-8 -..
본 문제의 저작권은 프로그래머스(https://programmers.co.kr/)에 있습니다. 문제 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요. Coding - Python3 처음에는 뒤에 0을 붙여서 모두 같은 자릿수를 만든다음 크기를 비교하면 된다고 생각했다. 하지만, 반례가 존재한다. [12..
본 문제의 저작권은 프로그래머스(https://programmers.co.kr/)에 있습니다. 문제 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다. 예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면 array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다. 2에서 나온 배열의 3번째 숫자는 5입니다. 배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solu..
DFS 와 BFS 에 대한 글은 아래 글을 참고한다. 2020/03/29 - [Algorithm] - 그래프 BFS, DFS 알고리즘 (with Python3) 그래프 BFS, DFS 알고리즘 (with Python3) 그래프 탐색 알고리즘에는 대표적으로 BFS 와 DFS 가 있다. 본 글에서는 아래 그래프를 가지고, BFS 와 DFS 의 탐색 알고리즘을 살펴본다. BFS 너비 우선 탐색을 BFS 라 부르고, Breadth Frist Search 의 약자이.. memostack.tistory.com 미로찾기 알고리즘 DFS, BFS 알고리즘을 이용해서 미로찾기 알고리즘을 구현할 수 있다. 문제 풀이의 핵심은 2가지이다. 미로 찾기 문제를 풀때는 미로를 모형화하여 그래프로 나타내는 것. 자료구조(Stack..
BFS 에 대한 개념은 아래 글을 참고한다. 2020/03/29 - [Algorithm] - 그래프 BFS, DFS 알고리즘 (with Python3) 탐색 알고리즘 BFS 응용 모든 노드를 탐색(방문)하면서 노드(Node)간의 비용(Cost)을 같이 구한다. 문제 사람들간의 친밀도를 구한다. 사람: 노드(Node) 친밀도: 비용(Cost) 예를들어, 사람과 사람 사이의 친밀도를 1 이라 한다. A ~ M 까지 사람이 있을때, A를 기준으로 각각의 사람들과의 친밀도를 구한다. A 와 B는 친밀도가 1이다. B 와 D는 친밀도가 1이다. A와 D는 친밀도가 2이다. ... Coding - Python3 본 글에서는 파이썬을 이용하여 문제를 풀이한다. BFS 알고리즘으로 노드를 탐색하는것은 동일하다. 단, ..
그래프 탐색 알고리즘에는 대표적으로 BFS 와 DFS 가 있다. 본 글에서는 아래 그래프를 가지고, BFS 와 DFS 의 탐색 알고리즘을 살펴본다. BFS 너비 우선 탐색을 BFS라 부르고, Breadth Frist Search 의 약자이다. 해당 노드와 같은 레벨(Level)의 노드를 먼저 탐색을 하기 때문에 붙여진 이름이다. 위 그래프를 예로 탐색 순서를 나열하면, 아래와 같은 순서로 탐색을 하게된다. A - B - C - D - E - F - G - H - I - J - K - L - M 코드 아래 코드는 unittest 기반으로 작성했다. 알고리즘은 bfs() 메소드를 참고한다. # -*- coding: utf-8 -*- import unittest def bfs(graph, start): """..
Palindrome 팰린드롬은 한국말로 회문이라고 한다. 회문은 거꾸로 읽어도 같은 문자열이 되는 문자열을 말한다. 예를들어서, "mom", "bob", "12321" 과 같은 문자열을 말한다. 팰린드롬을 확인하는 방법은 여러가지가 있겠지만, 큐와 스택의 특성을 이용하면 쉽게 찾을 수 있다. 큐는 FIFO 특징을 가지고 있고, 스택은 LIFO 특징을 가지고 있다. 큐와 스택에 대한 개념은 아래글을 참고한다. 2020/03/28 - [Algorithm] - 큐(Queue) 와 스택(Stack) 자료구조 로직(Logic) 큐와 스택에 각각 문자열을 담는다. 큐에서 꺼낸값과 스택에서 꺼낸값이 모두 같다면 회문이다. 예를들어서, 12321 이라는 회문이 있을때, 큐와 스택에 각각 담는다. => queue: 12..
큐와 스택은 문제를 해결하면서 굉장히 많이 사용하는 자료구조이다. 큐(Queue) 큐는 먼저 들어온 원소가 가장 먼저 나간다는 특징이 있다. 이러한 특징을 FIFO(First-In First-Out) 이라고 한다. 큐에 원소가 들어가는 것을 인큐(enqueue) 라고 하고, 반대로 나가는 것을 디큐(dequeue)라고 한다. 예를들어, [1, 2, 3, 4] 라는 데이터를 큐에 담고 뺀다고 해보자 1을 넣는다. => queue: 1 2를 넣는다. => queue: 1, 2 값을 뺀다. => 1이 나온다. => queue: 2 3를 넣는다. => queue: 2, 3 4를 넣는다. => queue: 2, 3, 4 값을 뺀다. => 2가 나온다. => queue: 3, 4 값을 뺀다. => 3이 나온다. =..
이진 탐색 알고리즘 이진 탐색(Binary Search) 알고리즘은 순차 탐색 알고리즘보다 더 빠르게 탐색할 수 있다. 빠르게 탐색할 수 있는 이유는 둘로 분할(이분)하여 탐색하기 때문이다. 예를들어, 1000페이지까지 있는 책이 있을때 630페이지를 찾으려고 한다. 우리는 대충 책을 펼쳐서 페이지를 확인한다. 그때 500페이지라면 630 페이지는 500페이지보다 뒤에 있으므로 앞 페이지를 살펴볼 필요가 없어진다. 하지만, 이진 탐색을 하려면 위 예제와 같이 탐색할 데이터 그룹이 정렬이 되어 있어야한다는 조건이 있다. 코딩 반으로 나누어서 중간 값과 목표값(target)을 비교한다. 같다: 인덱스를 반환한다. 목표값이 중간값보다 작다: 중간값의 인덱스보다 작은 왼쪽에서 다시 찾는다. (오른쪽은 버려도된다..
파이썬 정렬 메소드 파이썬에서는 정렬을 할때 sort() 와 sorted() 메소드를 사용한다. sort() sort() 메소드는 리스트를 오른차순으로 정렬해준다. >>> data = [3, 6, 12, 7, 10, 99, 23, 5, 9] >>> data.sort() >>> data [3, 5, 6, 7, 9, 10, 12, 23, 99] sorted() sorted() 메소드는 오름차순으로 정렬 후 새로운 리스트를 반환해준다. >>> data = [3, 6, 12, 7, 10, 99, 23, 5, 9] >>> sorted(data) [3, 5, 6, 7, 9, 10, 12, 23, 99] 파이썬에서는 어떤 정렬 알고리즘을 사용할까? 흔히 알고리즘을 배우면 아래 5가지 정렬 알고리즘을 배운다. 선택 정..