본문 바로가기

전체 글78

[vite] PWA(프로그레시브 웹 앱, Progressive Web App) 만들어보기 (with vitepwa) 이 글에서는 vite 기반 react 프로젝트에 vitepwa를 적용하는 방법에 대해 설명하려고 한다. 이미 vite 기반 react 프로젝트가 구성되어 있다는 가정하에 진행한다. react를 사용한 이유는 회사에서 react를 사용하다보니 최근에는 프로젝트 할 때 최대한 react로 하려고 하는 편이다. (개인적으로는 vue를 더 선호한다.) 개요 pwa는 프로그레시브 웹 앱 (Progressive Web App) 의 약자이다. 자세한 이야기는 MDN의 프로그레시브 웹 앱 소개에서 확인해보면 좋을 것 같다. 요약하면 일반 웹 앱의 진화된 형태라고 생각하면 될 것 같다. 웹 앱을 설치 가능한 형태로 만들어 준다. vitepwa 적용하기 vitepwa는 vite 기반 프로젝트에서 pwa를 쉽게 설정할 수 .. 2023. 8. 27.
연결리스트 - 노드의 교집합 찾기 교집합: 단방향 연결리스트 두 개가 주어졌을 때 이 두 리스트의 교집합 노트를 찾은 뒤 반환하는 코드를 작성하라. 여기서 교집합이란 노드의 값이 아니라 노드의 주소가 완전히 같은 경우를 말한다. 즉, 천 번째 리스트에 있는 k번째 노드와 두 번째 리스트에 있는 j번째 노드가 주소까지 완전히 같다면 이 노드는 교집합의 원소가 된다. 단방향 알고리즘의 특성상 같은 노드를 바라보게 되면 그 이후로는 데이터가 같다. 따라서 뒤에서부터 길이를 일치시키면 되겠다. 예를 들어 a : 1 - 2 - 3 - 4 - 7 - 8 - 9 b : 5 - 6 - 7 - 8 - 9 라는 두 단방향 연결리스트가 있다면 둘이 같은 노드를 바라보는 7 부터는 동일하게 된다. 따라서 뒤에서 부터 a 1 2 3 4 7 8 9 b 5 6 7.. 2023. 8. 27.
[pnpm] firebase hosting과 github action 연결하기 이 포스트는 pnpm 기반의 프로젝트에서 firebase hosting과 github action 연결하는 법에 대해서 설명한다. 기본적으로 firebase hosting 에서는 github action과 연결을 제공한다. GitHub pull 요청을 통해 실시간 및 미리보기 채널에 배포 이 방법을 통해 생성을 하게 되면 github workflow 파일이 생성된다. (firebase-hosting-merge.yml, firebase-hosting-pull-request.yml) 내용은 다음과 같다. (jobs 부분만 보면 된다. 두 파일 다 원리는 동일하기 때문에 firebase-hosting-merge.yml 을 기준으로 설명한다.) # This file was auto-generated by the.. 2023. 8. 26.
리스트의 합 리스트의 합: 연결리스트로 숫자를 표현할 때 각 노드가 자릿수 하나를 가리키는 방식으로 표현할 수 있다. 각 숫자는 역순으로 배열되어 있는데, 첫 번째 자릿수가 리스트의 맨 앞에 위치하도록 배열된다는 뜻이다. 이와 같은 방식으로 표현된 숫자 두 개가 있을 때, 이 두 수를 더하여 그 합을 연결리스트로 반환하는 함수를 작성하라. 입력 : (7→1→6) + (5→9→2), 즉 617 + 295 출력 : 2→1→9, 즉 912 class Node: def __init__(self, val=0, next=None): self.val = val self.next = next def sum_of_two_linked_list(a, b): number_a = linked_list_to_number(a) number_b.. 2023. 8. 25.
단방향 연결리스트의 중간 노드 삭제 중간 노드 삭제: 단방향 연결리스트가 주어졌을 떄 중간(정확히는 가운데 노드일 필요는 없고 처음과 끝 노드만 아니면 된다)에 있는 노드 하나를 삭제하는 알고리즘을 구현하라. 단, 삭제할 노드에만 접근할 수 있다. 삭제할 노드(A) 접근 → 다음 노드(B = A.next) 접근 → A.next = B.next, A.value = B.value 하면 A 노드가 사라지게 된다. 코드 class Node: def __init__(self, val=0, next=None): self.val = val self.next = next def delete_node_in_middle(node_to_delete): # 첫 번째 노드나 마지막 노드는 삭제할 수 없다고 명시되어 있기 때문에 고려하지 않음. # 다음 노드의 값.. 2023. 8. 24.
정렬되어있지 않은 연결리스트의 중복 없애기 중복 없애기: 정렬되어있지 않은 연결리스트가 주어졌을 때 이 리스트에서 중복되는 원소를 제거하는 코드를 작성하라 (+ 임시 버퍼를 사용할 수 없다면 어떻게 풀 수 있을까?) 문제를 듣고 바로 든 생각 Set을 이용하여 풀 수 있지 않을까? 임시 버퍼가 없다면 반복문 2개로 해결할 수 있지 않을까? 해결 코드는 따로 적지 않는다. python에서 LinkedList를 구현 위한 Node Class 정의하기. 아래와 같이 Class를 정의 할 수 있다. class Node: def __init__(self, val=0, next=None): self.val = val self.next = next 정의된 Node Class는 아래와 같이 사용할 수 있다. node2 = Node(2) node1 = Node(.. 2023. 8. 23.