목록분류 전체보기 (107)
정글에서 온 개발자

만드는 이유조직도를 표현하기 위해서 만들게 됐다.앞에서 작성한 서버에 API 요청을 해서 자료를 받아온다. 다음과 같은 자료가 들어온다.구현Organize-Map 컴포넌트조직도 전체가 나타나게 될 컴포넌트다.최초의 루트 Organize를 포함한다.export class OrganizeMapComponent { auth : Auth = {} as Auth organize : Organize = {} as Organize constructor(private authService: AuthService, private companyService: CompanyService) { this.auth = this.authService.getAuth() this.companyService.getCo..

만드는 이유회사의 조직도를 구성해야했다.조직도는 트리구조로 되어있기에 DB로 트리구조를 표현할 방법이 필요했다.이러한 트리구조는 이 외에도 댓글의 댓글의 댓글, 게시판 내의 하위 게시판등 계층형 구조(Hierachy structure)에 자주 쓰인다.자료 조사Models For Hierachial DataTrees And Hierachies In SQL위 두 자료를 주로 참고했다.첫번째 자료가 큰 줄기를 잡아주고, 두번째 자료는 그 안에서 세부적인 변형들을 소개한다.정리크게 다음 네가지 방법이 있다.Adjacency List (인접 리스트)Path Enumeration (경로 열거)Nested Sets (중첩 집합)Closure Table (폐쇄 테이블)각 방법 개요인접 리스트 - 자식 노드가 부모 노드..

앵귤러에서 위와 같은 동적 폼을 만들기로 한다.nz-zorro(Ant for Angular)도 같이 사용하였다.HTML @if(i!=0){ 삭제 } 추가동적으로 생성되는 그룹 (vacation-pickers)를 만든다.그 안에 vacations.controls의 수만큼 반복한다.i를 따로 선언해서 넘겨줘야 해서, @if 대신 *ngFor 디렉티브를 사용하였다.form으로 제출할 값을 바꿔주는 이벤트 리스너를 달아준다. (onCalendarChange)동적으로 추가된 요소를 삭제할 버튼을 만든다. (가장 첫번째 요소는 삭제하지 못하게 하였다.)추가 버튼으로 요소를 동적으로..

기존 방법기존에는 휴가 신청서라는 개념 없이, 휴가를 개별 등록하고 개별 승인 받도록 하였다.요구 사항과 문제상황하지만, 프로젝트를 진행하면서 ‘휴가 신청서’를 받고, 결재(1차, 2차)를 하고, 필요할 때 한번에 출력 (관공서 제출용) 하고 싶다는 요청이 있었다.기존에 휴가를 단일하게 관리하면, 승인,반려 취소시 엔티티 하나만 신경 쓰면 됐다. 하지만 ‘휴가 신청서’라는 더 큰 객체에 휴가가 포함이 돼버리면 휴가 신청서 전체의 승인과, 개별 휴가의 승인을 개별로 관리해야 한다.또 다른 문제는 휴가의 ‘변경과 취소’ 다. 이럴 때 종이 서류로 처리할 경우, 어떤 휴가를 어떻게 바꾸고 싶고, 어떤 휴가를 취소하고 싶은지 ‘변경 신청서’ 를 새로 쓰면, 그 신청서에 따라서 기존 휴가를 조정하거나 삭제한다.이..

연차 촉진의 개요휴가가 남으면 휴가를 쓰도록 촉진. 촉진시 미사용 휴가 수당이 면제됨1차 촉진, 2차 촉진, 노무 거부로 이루어짐모든 과정은 근로자가 인지할 수 있어야 함.필요한 이유연차 촉진구성원의 자유로운 휴가 사용 장려.회사의 미사용 연차 수당 지급 부담 경감번거로운 절차 해소회사 : 구성원 별 연차 계산, 1차 촉진, 2차 촉진, 노무 수령 거부 등의 프로세스구성원 : 연차 일수 관리, 변경 시 재결재, 팀원과 일정 조율 등연차 촉진을 하긴 하고 싶은데, 과정이 너무 복잡해서 필요하다.해결해야 할 문제들법령대로라면 사람마다 연차가 발생하는 시기가 다르고, 촉진해야하는 시기가 다르다.개별 관리가 어려워 회계일 기준 관리를 허용해줬다.이 과정에서 휴가가 발생하는 기준이 회사마다 다르다. (휴가 선지급..

단축키 (Ctrl+Shift+B) 만 눌러서 미리 셋팅한 stdin으로 내 go 코드를 테스트해 볼 수 있는 환경을 구성하려고 한다.먼저 위 그림과 같이 디렉토리를 구성한다. go.mod는 아무 모듈 이름으로나 아래 명령어를 실행해서 생성한다.go mod init [모듈명]solve.go 파일 이름은 아무거로나 바꿔도 된다. (저는 보통 백준 문제 번호로 맞춤)launch.json{ "version": "0.2.0", "configurations": [ { "name": "Launch Program", "type": "go", "request": "launch", "mode": "auto", "program": ..
코드from collections import Counterimport mathdef solution(clothes): c = Counter(x[1] for x in clothes) product = math.prod(c[p]+1 for p in c) return product-1메인 아이디어는 각 파츠별로 안입은 것까지 포함해서 조합으로 경우의 수를 센 후, 하나도 안 입은 경우 1가지를 빼주는 것이다.count만 할 거라 hash count 특화 객체인 Counter를 활용했다.math.prod가 sum 처럼 iterable의 곱셈을 해줘서 활용했다.배운것들counter.values()counter의 값들을 가공할 필요 없이 바로 쓸 수 있다면, 이 속성을 활용해도 좋겠다.functo..
코드def solution(phone_book): book = set(phone_book) for num in phone_book: for i in range(1,len(num)): check = num[:i] if(check in book): return False return True입력:전화번호 수 1~1,000,000각 전화번호 길이 1~20접근만약 모든 숫자에 대해서 서로 비교를 하면 N^2이 나온다. 1e12가 되면서 백준 기준 1만 초 정도 걸릴 것 같다.문제 유형이 해싱이니, 해싱을 이용해야할 것 같은데 각 전화번호의 프리픽스를 해싱하는 것보다는 전화번호 자체를 해싱하면 좋을 것 같다.그럼 해싱한..
https://overthewire.org/wargames/bandit/bandit25.html Level Goal A daemon is listening on port 30002 and will give you the password for bandit25 if given the password for bandit24 and a secret numeric 4-digit pin" data-og-host="overthewire.org" data-og-source-url="https://overthewire.org/wargames/bandit/bandit25.html" data-og-url="https://overthewire.org/wargames/bandit/bandit25.html" data-og-im..

heapify는 O(logN)의 작업을 N 번 하니까 여느 sort처럼 O(NlogN)이 걸릴 것 같지만 그렇지 않다.heapify한 heap을 이용해 배열로 만드는 시간 (heap-build)가 O(NlogN)이 걸리는 것이다.레퍼런스요약각 노드들이 최대 얼마나 움직일 수 있는지를 기준으로 정해진다.각 노드들은 연산시 아래쪽으로만 이동한다. (재귀적인 heapify)각 높이에 있는 노드들은 최악의 경우에 h번 swap을 한다. (꼭대기에서 바닥까지 가는 경우)각 높이에 있는 노드는 대략 n/2^h개 이다. (2^h개의 노드를 가정했을 때, 꼭대기층에는 1개, 그 아래층에는 2개..)이 식을 시그마하면 O(n)이 된다.설명heapify의 과정위와 같이 맨 마지막 비 리프부터 시작해서, 윗쪽 노드로 가면서..