여기에서는 실습 개념으로

Vite를 이용해서 React 앱 생성하는 과정만 빠르게 살펴볼 것이다.

 

0. 실습 환경

- Ubuntu 20.04

 

1. Node

- Vite를 사용하기 위해서는 node가 설치되어 있어야 한다.

- 아직 설치가 안되어 있다면, 아래 포스팅을 통해 nvm 기반으로 설치하자.

  . https://www.whatwant.com/entry/npm

nvm

 

- 원활하게 Vite를 사용하기 위해서는 node 버전이 18 이상이어야 한다고 한다.

node version

 

2. Vite 설치

- npm을 이용하여 vite를 설치하면 된다.

> npm install vite@latest

install vite

 

3. Project 생성

- vite를 이용해서 React project를 생성해보자.

  . 아래 캡처한 내역과 같이 3가지 정보를 작성 및 선택해주면 된다.

> npm create vite@latest

create project

 

4. App 실행

- vite가 알려준대로 진행해보면 된다.

> cd gemini-nagger

> npm install

> npm run dev

run

 

- 웹브라우저를 통해 확인해보자.

WEB

 

간략히 살펴보았다.

반응형

'Programming > Web' 카테고리의 다른 글

백엔드 프레임워크 - KeystoneJS  (1) 2023.07.13
npm, node 그리고 nvm  (0) 2023.01.04

업무로 API 서비스를 만들 때,

최근에는 Python을 이용하는 것이 편하다보니 주로 FastAPI를 이용하곤 한다.

 

그러다가 2달 전쯤 새로운 웹-프레임워크(Web-Framework) 소식을 듣게 되었다.

- https://news.hada.io/topic?id=16091

GeekNews

 

새로운 프레임워크임에도 불구하고 의외로(?) 반응이 꽤 괜찮다.

 

사이트도 산뜻하게 디자인되어 있다.

- https://fastht.ml/

FastHTML

 

FastHTML 스스로 만든 페이지이겠지?! ㅋㅋㅋ

어!? 나처럼 생각하는 사람이 많아서인지..... 그렇다고 한다!!!

FastHTML

 

5천개가 넘는 Star와 200건이 넘는 Fork를 자랑하는 프로젝트이다.

- https://github.com/AnswerDotAI/fasthtml

GitHub

 

GeekNews에서 괜히 경쟁력이 있다는 말을 한 것이 아니다.

의외로 많은 것들이 제공/지원되고 있다.

- https://gallery.fastht.ml/

FastHTML Gallery

 

1. Installation

설치 과정은 Python 패키지답게 정말 심플하다.

- https://github.com/AnswerDotAI/fasthtml?tab=readme-ov-file#installation

Installation

 

그래서, Python 가상환경 만들고 pip 설치를 진행했는데...

Error

 

얼라료?!

에러!? 이런!!

 

패키지를 아예 찾지 못하는 것이 이상해서...

혹시나 하고 Python 버전을 올려봤다.

Python 3.10.9

 

이런, Python 3.8.x 버전은 지원하지 않는 것으로 보인다.

짧게 살펴봤지만, Document 어디에서도 Python 버전 제약에 대한 설명이 없었는데....

 

 

2. Usage

준비가 되었으니 빨리 Hello를 외쳐보자.

 

main.py

 

실행은 그냥 하면 된다.

Execute

 

실행 결과에서 안내해주는 주소를 참고해서

웹-브라우저로 결과를 확인해보자.

Chrome

 

소스코드를 확인해보면 다음과 같다.

View Source

 

그런데, 웹-브라우저에서 "Hello World!" 부분을 클릭해도 아무런 일이 발생하지 않는다.

(내부적으로는 404 에러가 발생하겠지만 ^^)

 

소스코드에 8-9 라인을 다음과 같이 추가하고 Save를 해보자.

update

 

그러면, 다음과 같이 파일이 변경된 것을 감지하고 자동으로 Reloading을 한다!!!

브라보 !!!

Reloading

 

웹-브라우저에서 "Hello World!" 부분을 클릭하면

다음과 같이 다른 내용이 출력된다.

Click

 

호오~ 정말 심플하네!!!

 

 

3. Example

여러 예시들을 참고하면 도움이 될 것이다.

- https://github.com/AnswerDotAI/fasthtml-example

GitHub

 

다양한 App 예시들을 볼 수 있다.

Exaples

 

음... 과연 앞으로도 지속적으로 성장을 할 것인지

관심있게 지켜봐야겠다.

반응형

정리 한 번 하려다가 만날 미뤄뒀던 아이템을 광복절을 맞이하여 드디어 포스팅해본다.

 

소스코드를 Local PC에 두지 않고, 원격 서버에 저장해놓고 사용해야할 경우가 있다.

주로 실행 환경의 제약이 있어서 그렇게 해야하기도 하고,

아니면 에디터(IDE)를 따로 사용하고자 하는 경우에 그렇게 하기도 한다.

 

지금 하고자 하는 것을 그림으로 표현해보면 다음과 같다.

출처: https://www.whatwant.com

 

1. SSH

  - 일단, Local PC에서 Remote PC로 SSH 접속이 가능한 환경이어야 한다.

  - 그리고 가급적 SSH Public Key 방식으로 접근하는 것이 보안적으로도, 사용성 측면에서도 좋다.

    . SSH Public Key - SSH 공개키

    . 조금 더 알아보는 SSH Public Key

 

출처: https://www.whatwant.com

 

2. VSCode

  - Local PC에 VSCode가 설치되어 있어야 한다.

    . https://code.visualstudio.com

VSCode

 

  - Extensions 중에서 "Remote - SSH"를 선택해서 설치해야 한다.

Extensions : Remote - SSH

 

  - 설치가 완료되면, 오른쪽 메뉴에 뭔가 하나 더 추가된 것을 볼 수 있다.

Extensions : Remote - SSH

 

  - "Remote Explorer" 메뉴를 클릭하면 다음과 같은 화면을 볼 수 있다.

Extensions : Remote - SSH

 

3. Connect

  - 이제 Remote PC/Server에 연결을 해보자.

  - Remote Explorer에서 추가를 해도 좋고,

New Remote

 

  - "Ctrl + Shift + p" 해서 "Remote-SSH ..." 메뉴 중에서 "Connect Current Window to Host ..."를 선택하자.

Connect Current Window to Host ...

 

  - "+ Add New SSH Host..."를 선택하자.

+ Add New SSH Host...

 

  - 가이드 해주는대로 서버 정보를 입력하면 된다.

input

 

  - 뒤의 "-A" 옵션은 선택적이긴 하지만 같이 넣어주자.

input

 

  - 어디에 저장된 Key 값으로 입력할 것인지를 물어본다. 골라주면 된다.

select SSH Config

 

  - 접속 정보 입력은 끝났다.

  - "Connect"를 클릭하면, Remote PC/Server에 연결을 하면서 필요한 패키지들을 추가 설치한다.

Host added!

 

  - 짜잔! 되었다!

connected

 

4. Extensions of Remote

  - 그런데, 이렇게 Remote PC/Server를 연결하게 되면 기존에 사용하던 Extension들이 안보인다.

  - 필요한 것들을 하나씩 추가로 설치해줘야 된다. 이해가 되긴 하지만, 뭔가 불편하기도 하고....

Extensions

 

  - 하지만, 너무 좋다 !!!

VSCode for Remote

 

  - 지금 현재 작업하고 있는 위치가 어디인지는 오른쪽 아래 파란 내용을 보면 된다.

  - Terminal 환경도 너무 편하고, 작업 후 저장한 것이 바로 Remote PC/Server에 반영이 되니 이거 뭔가 좋다 !!!

 

 

반응형

'Programming' 카테고리의 다른 글

개발자라면 ... Google for Developers  (0) 2023.12.06
개발자들을 위한 AI 검색엔진 - phind  (0) 2023.04.30

요즘 저녁에 러닝을 하기 위해 격일로 조금 일찍 퇴근을 하는데.

비 예보가 있다는 것을 미처 인지하지 못해서 일도 못하고 러닝도 못하는 그런 사태가...

 

이런 핑계(?)로 갑자기 날씨 정보를 API로 얻어오는 것을 한 번 해보고 싶어졌다.

갑자기? 갑자기!

 

날씨 정보를 어디에서 얻어와야 할까!?

당연히 기상청 !!!

https://www.data.go.kr/data/15084084/openapi.do

 

무료인데다가 심지어 샘플 코드까지 제공해주고 있다.

샘플코드 - Python

 

사용을 위해서는 오른쪽 상단에 위치한 "활용신청"을 클릭하면 된다.

활용신청

 

적절한 내용으로 작성하여 신청하면, 즉시 승인이 된다.

신청 결과

 

상세 내용을 보면 다음과 같이 인증키 정보를 확인할 수 있다.

상세 내용

 

이제 잘 동작하는지 검증을 해보자.

 

1. Python 환경을 맞춰야 한다.

- requests 모듈을 사용하기 위해 설치가 필요하다.

 

2. 지역 위경도값을 확인하자.

- 공공데이터 포털에서 제공하는 참고문서를 다운로드 받아야 한다.

  . 기상청41_단기예보 조회서비스_오픈API활용가이드_(240715).zip

 

- 압축을 풀면 문서 파일이 2개 나오는데, 위경도 정보가 있는 엑셀 파일을 확인하면 된다.

 

- 내가 확인하고자 하는 지역의 X, Y 값을 확인하면 된다.

 

3. 코드 작성

- 다음과 같이 간단한 코드를 작성해보자.

  . API 키는 일반 인증키(Decoding )으로 사용했다.

 

- 실행 결과는 다음과 같이 나온다.

 

 

각 값들의 의미나 활용 관련하여서는 다운로드 받은 참고 자료 中 워드 파일을 살펴보면 된다.

sample

 

일단 기본적인 확인을 해봤으니,

아침에 자동으로 알람 오도록 만들어봐야겠다! ^^

반응형

[문제] Python으로 "Hello world!"를 가장 간단하게 출력하는 방법은?

[정답] 다음과 같은 방법을 생각해낸 사람은 파이썬 고수!!!

Hello world!

 

 

[문제] "python -m antigravity"를 실행하면 어떤 결과가 나올까?

[정답] 'antigravity'의 뜻은 반중력이며, 모든 것을 밀어내는 성질을 의미한다.

antigravity

 

응?! 아무것도 출력되는 것 없이 그냥 끝난다. 그런데... 갑자기 웹 브라우져가 실행되는데...

https://xkcd.com/353/

 

설마 XKCD를 처음보는 분이 계실리가.....?!

 

계실 수도 있으니 ^^ 설명을 해보자면,

 

랜들 먼로(Randall Munroe)가 일주일에 3번 연재하는 Web-Comic으로

공대 개그, Geek스러운 개그가 주된 유머 코드이다.

 

XKCD

 

웹사이트 메뉴 中 WHAT IF? 컨텐츠를 기반으로 책도 출간했다. 번역본도 있다.

아주 위험한 과학책

 

재밌지 않나!?

python CLI 가지고 별 이상한 일이 다 생긴다 ^^

 

 

[문제] python 으로 그래픽 UI를 어떻게 표현할 수 있는지 쉽게 설명할 수 있는 방법은?

[정답] python 에는 오랜 역사(?)를 갖고 있는 거북이(turtle) 모듈이 있다.

turtle demo

 

응!? turtle demo도 지원해준다고!?

turtle example

 

신기한(?) 윈도우가 하나 실행된다.

examples

 

하나 골라 보자.

clock example

 

turtle 모듈을 이용한 예제 코드도 볼 수 있고,

윈도우 하단의 "START"를 클릭하면 실행 결과도 확인할 수 있다.

 

"python -m turtledemo" 실행 하나만으로 이런 어플이 뜬다니,

대체 이런 것들은 어디에 숨어있었던 것인지...

 

그동안 Python을 몇 년 동안 만져왔는데, 지금까지 이런 것들을 전혀 몰랐다니!

 

 

생각보다 재미있어서 이런 것들 찾아서 몇 번 더 포스팅해보겠다 ^^

 

 

반응형

출처: https://www.whatwant.com

 

이번에는 Greedy Algorithm을 살펴보도록 하겠다.

 

앞서 살펴본 Dynamic Programming의 경우에는 모든 경우의 수를 고려하여 최적의 솔루션을 찾는 방식이었다면

Greedy Algorithm은 어떤 순간에 최선으로 보이는 것을 선택해서 문제를 푸는 방식이다.

 

뭔 말이냐고!? 일단 하나 살펴보자.

 

 

[Overview]

어떤 활동(activity)들의 집합이 있다고 해보자.

 

출처: https://www.whatwant.com

 

이처럼 여러 activities들이 있을 때,

서로 겹치지 않고 동시에 할 수 있는 activities 중 가장 큰 subset을 선택하는 문제는 어떻게 풀면 좋을까?

 

예를 들자면,

강의실이 하나만 있을 때 여러 수업들을 어떻게 배치해야 가장 많은 수업들을 배치할 수 있는지를 정하는 것과 같다.

 

[Sample]

예시를 하나 들어보자.

 

출처: https://www.whatwant.com

 

위와 같이 activity들이 있다고 했을 때 어떤 조합들이 가능할까?!

 

출처: https://www.whatwant.com

 

우선 {a3, a9, a11} 집합의 경우 mutually compatible 하게 잘 묶여 있다.

서로 배타적이면서 같이 어울릴 수 있는 조합이라는 말이다.

 

하지만, 이 집합은 주어진 상황에서 largest set이라고 할 수는 없다.

 

출처: https://www.whatwant.com

 

{a1, a4, a8, a11} set은 largest set이라고 할 수 있다.

4개보다 더 큰 조합은 찾을 수 없기 때문이다.

 

하지만 unique한 largest set은 아니다.

 

출처: https://www.whatwant.com

 

{a2, a4, a9, a11}의 경우도 largest set이다.

 

그런데, 이렇게 눈으로 정답을 찾는 것은 뭔가 좀..... ^^

 

[Optimal substructure]

일단 아래와 같은 문제가 주어졌다고 했을 때, 각 activity들의 시작 위치와 종료 위치를 작성해보자.

 

출처: https://www.whatwant.com

 

여기에서는 문제가 index 순서에 따라 종료 시간(f)이 순서대로 나와 있어서 정렬을 할 필요가 없지만,

종료 시간의 오름차순으로 정렬까지 해줘야 한다.

 

출처: https://www.whatwant.com

 

이렇게만 했으면 나머지는 쉽다.

 

출처: https://www.whatwant.com

 

제일 먼저 종료되는 시간 이후로 첫번째로 시작하는 activity를 선택하고,

그 activity가 종료되는 시간을 확인하고 또 다시, 그 종료 시간 이후로 시작하는 activity를 찾고... 반복하면 된다.

 

끝이다.

 

뭔가 허무한데, 끝이다.

 

 

[Elements of the greedy strategy]

어째서 Dynamic Programming과 다르게 Greedy Algorithm은 이렇게 문제를 풀 수 있는지에 대해서 알아보자.

 

출처: https://www.whatwant.com

 

subproblem을 모두 풀어야지만 솔루션을 선택할 수 있는 경우에는 Dynamic Programming 문제이고,

모든 subproblem을 풀기 전에 솔루션을 선택할 수 있는 문제는 Greedy Algorithm을 적용할 수 있다.

 

출처: https://www.whatwant.com

 

Zero-One 배낭 문제는 물건을 갯수 단위로만 가방안에 넣을 수 있는 경우에 해당하는 문제이다.

물건들의 가격과 무게가 모두 다르다고 했을 때, 어떻게 넣어야지 가장 비싸게 물건을 훔칠 수 있는지를 찾는 것이다.

모든 조합을 고려해야 문제가 풀리는 것이다.

 

출처: https://www.whatwant.com

 

이와는 다르게, 만약 아이템을 조각내서 가방에 담을 수 있다고 하면 어떻게 될까?

그러면 개별 단가가 가장 비싼 것들로 정렬해서 그냥 그렇게 넣으면 된다.

담을 수 있는 무게와 딱 떨어지지 않을 경우에는 조각내면 된다.

모든 조합을 고려할 필요가 없는 것이다.

 

예시를 들어보자.

 

출처: https://www.whatwant.com

 

⒜와 같이 상황이 주어졌다고 해보자.

배낭은 담을 수 있는 무게의 한계가 있다.

 

⒝는 Dynamic Programming 방식으로 해답을 찾아보는 것이다. 모든 조합을 검토하는 것이다.

 

⒞는 Greedy Algorithm 방식이다. 무게당 단가를 계산해서 가장 비싼 것들부터 넣기 시작하다가

무게 제한에 걸리는 시점에는 해당 아이템을 잘라내서 무게에 맞추면 되는 것이다.

 

확실히 문제의 유형이 다르다!!!

반응형

출처: https://www.whatwant.com

 

이번에 살펴볼 Dynamin Programming 알고리즘은

Matrix-Chain Multiplication (연쇄 행렬 곱셈)이다.

 

[Background]

우선 알아야할 내용은 바로 "행렬 곱" 규칙이다.

 

 

'행렬 곱'을 하기 위해서는 앞 행렬의 column 길이와 뒤 행렬의 row 길이가 같아야 한다.

그러면, 앞 행렬의 row 와 뒤 행렬의 column 길이만큼의 결과가 나온다.

 

두번째로 알아야할 내용은 행렬 곱에서 '결합 법칙'이 성립한다는 것이다.

 

 

그런데, 여기에서 우리가 주의깊게 살펴봐야할 사실이 하나 등장한다.

 

행렬 곱에서 결합을 어떻게 하는지에 따라 계산 횟수가 달라진다는 것이다.

 

 

위의 예시와 같이 3개의 행렬이 주어졌을 때,

계산 횟수를 살펴보면 10배의 차이가 발생한다는 것을 알 수 있다.

 

 

[Problem]

그러면 우리가 여기에서 해결하고자 하는 문제가 무엇일까?

 

 

곱셈을 해야하는 여러 행렬이 순서대로 주어졌을 때,

어떻게 결합을 해야 전체 계산 횟수를 최소화 할 수 있을지를 찾아내는 것이다.

 

 

[Brute force approach]

일단 무식하게 살펴보자.

 

 

총 4개의 행렬이 주어졌을 때, 총 5가지의 묶음 방법이 존재한다.

 

이를 분류해보면

앞에서부터 1개 묶음을 하면 총 2종의 결합 방법이 존재하고

2개 묶음을 하면 1종,

3개 묶음을 하면 2종의 결합 방법이 있기에 총 5종의 결합 방법이 있게 된다.

 

이 과정을 공식으로 살펴보면 다음과 같다.

 

 

공식을 유도하고 분석하는 것은 생략하도록 하겠다.

 

그런데, 이를 Asymptotic 하게 생각해보면, 다음과 같다.

 

 

마찬가지로 계산식 유도 및 분석은 생략하고.... 결론적으로 엄청난 경우의 수가 나오기에...

이렇게 문제를 푸는 것은 말이 안됨! ^^

 

[Solution]

똑똑하게 문제를 풀어보자.

 

 

지금까지 살펴본 내용을 공식화한 것으로 생각하면 된다.

위 공식을 가지고 직접 손으로 계산을 해보자.

 

행렬에 따라서 row와 column은 다음과 같이 살펴볼 수 있다.

 

 

왜 이렇게 표현이 되는지 이해가 안되면 안된다.

앞에서 충분히 살펴본 내용을 곰곰히 생각해보면 된다.

 

예시를 하나 들어보자.

행렬이 6개가 주어졌다고 했을 때, p값이 다음과  같이 제시 되었다고 해보자.

 

 

이 문제를 풀기 위해 우리는 m, s 행렬을 작성해야 한다.

 

 

왜 이렇게 하는지는 문제를 풀어보면서 알아보자.

 

 

위 공식을 살펴보면 알겠지만,

i=j 조건에서는 모두 0 값을 갖게 되고 i보다 j는 항상 커야 되기 때문에 표의 아랫부분은 계산하지 않아도 된다.

 

 

m[1][2] 값부터 계산해보면 위와 같이 정리해볼 수 있다.

k값은 ( i ≤ k < j ) 조건이므로 ( 1 ≤ k < 2 )와 같고, 그렇기 때문에 k값은 1밖에 갖을 수 없다.

 

s 행렬의 s[1][2] 값은 k값이 1이므로 1값을 작성하면 된다.

 

이런식으로 m[2][3], m[3][4], m[4][5], m[5][6] 부분을 채울 수 있다.

 

 

이번에는 m[1][3]을 계산해보자.

 

앞에서와 달리 k값은 ( 1 ≤ k < 3 )이므로, k값은 1, 2 의 2가지 경우가 있을 수 있다.

그러므로, 최종 결과가 2개 나오고, 그 중에서 min 값을 선택하면 된다.

 

k값이 1인 경우를 선택했으므로 s[1][3] 위치에는 1을 작성하면 된다.

 

 

하나씩 하나씩 이렇게 채워나가면 된다.

 

전부 채우면 다음과 같다.

 

 

끝~

 

[Pseudo Code]

이 과정을 가지고 pseudo code로 만들어보자.

 

 

이렇게 만들어진 결과물을 출력하기 위한 code는 다음과 같다.

 

 

[Time & Space]

time complexity 와 memory space를 계산해보면 다음과 같다.

 

먼저 Time Complexity를 살펴보자.

 

 

무려 n의 3승 이다.

 

메모리 공간을 계산해보면 다음과 같다.

 

 

알고리즘을 위해 추가로 사용하는 메모리는 m, s 배열이 필요하다.

Asymptotic 하게 해보면.... 결국은 n의 제곱만큼의 공간을 필요로 한다.

 

반응형

출처: https://www.whatwant.com

 

[ Terminology & Problem ]

이번에 살펴보고자 하는 알고리즘은 "Longest Common Subsequence (LCS)" 이다.
어떤 문제를 해결하고자 하는 것인지 설명하기 전에 용어에 대한 정의부터 살펴보겠다.

 

출처: https://www.whatwant.com

 

여기에서 주의깊게 살펴봐야 할 것은 "Substring"인데, 연속적인 character를 의미한다.

 

출처: https://www.whatwant.com

 

반면, "Subsequence"는 비연속적인 character 순서를 포함한다.

 

출처: https://www.whatwant.com

 

2개의 string이 주어졌을 때, 공통적으로 있는 subsequence를 "Common Subsequence"라고 한다.

그리고 "Common Subsequence" 중에서 가장 긴 길이를 갖는 것을 "Longest Common Subsequence (LCS)"라고 한다.

 

이런 LCS를 구하는 방법을 찾는 것이 이번 목표이다 ^^

 

[Brute force approach]

착실하게 (무식하게?) 찾는 방법은 다음과 같다.

 

출처: https://www.whatwant.com

 

당연히 이렇게 찾는 것은 말이 안된다.

입력 string의 갯수가 n개라고 했을 때 2의 n승만큼 subsequence가 나오기 때문이다.

 

[Notation]

이후 설명할 내용에서 사용하는 notation을 정리하면 다음과 같다.

 

 

[Idea]

똑똑하게 해결하기 위한 아이디어는 다음과 같다.

 

출처: https://www.whatwant.com

 

복잡해보이는데, 가만히 살펴보면 엄청 당연한 이야기를 하고 있다.

 

특정 위치의 chracter가 같다면 LCS는 그 같은 값은 일단 LCS에 포함되는 것이고,

각 입력 string에서 동일한 값보다 1씩 작은 string의 LCS값을 더해주면 전체 LCS가 된다.

 

반면, 특정 위치의 chracter가 같지 않다면 LCS는 입력 string중 하나의 값을 1 차감한 내역으로 다시 LCS를 구하면 된다.

 

 

[ Longest Common Subsequece - Dynamic Programming Algorithm ]

위의 아이디어를 정리하면 다음과 같은 알고리즘이 된다.

 

 

이걸 어떻게 하는 것인지 살펴보자.

 

다음과 같은 2개의 string이 입력되었을 때 다음과 같은 표를 그리고 초기화 하자.

  - X = ABCBDAB

  - Y = BDCABA

 

출처: https://www.whatwant.com

 

앞에서 정리한 알고리즘을 기반으로 하나씩 값을 채워나가면 된다.

 

출처: https://www.whatwant.com

 

① x ≠ y 이므로 둘 중 큰 값 선택해야 하는데, 둘 모두 0이므로, 0

② ③ 상동

④ ⑥ x = y 이므로, 왼쪽 대각선 위의 값 + 1

⑤ x ≠ y 이므로 둘 중 큰 값 선택해야 하는데, ④ 값이 1이므로, 1

 

그리고, 어느 곳에서 값을 받아갔는지 화살표로 표기 해줘야 한다.

 

이런식으로 하나씩 값을 작성해 나가면 다음과 같이 된다.

 

출처: https://www.whatwant.com

 

LCS값이 어떻게 되었는지는 다음과 같이 추적해볼 수 있다.

 

출처: https://www.whatwant.com

 

화살표를 보면 알겠지만, 정답이 하나만 있는 것은 아니다.

 

출처: https://www.whatwant.com

 

[Pseudo Code]

손으로 진행했던 것을 코드로 만들어 보자.

 

출처: https://www.whatwant.com

 

손으로 진행했던 것과 차이가 있는 부분 위주로만 설명해봤다.

위 표에서 화살표를 살짝 끄적였는데, code에서는 b array를 통해 기록하도록 했다.

 

결과를 출력하기 위한 코드는 다음과 같다.

 

 

[Time & Space]

code를 보면 직관적으로 파악 가능한 것 처럼 Time complexity는 다음과 같다.

 

 

Space는 b array + c array 공간이 추가적으로 필요하기에 다음과 같다.

 

 

그런데, Space를 줄일 수 있는 경우가 있다.

실제 String 정보까지는 필요없고, 길이값만 필요하다고 하면 다음과 같이 작은 space만 필요로 한다.

 

 

또 다른 경우로는 다음과 같은 case가 있을 수 있다.

 

출처: https://www.whatwant.com

 

LCS에 대해서는 여기까지~

반응형

+ Recent posts