목록분류 전체보기 (64)
정글에서 온 개발자
기존 방법기존에는 휴가 신청서라는 개념 없이, 휴가를 개별 등록하고 개별 승인 받도록 하였다.요구 사항과 문제상황하지만, 프로젝트를 진행하면서 ‘휴가 신청서’를 받고, 결재(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의 과정위와 같이 맨 마지막 비 리프부터 시작해서, 윗쪽 노드로 가면서..
내 코드from collections import defaultdictdef solution(participant, completion): d = defaultdict(int) for p in participant: d[p]+=1 for c in completion: d[c]-=1 return [x for x in d if d[x]!=0][0]다른 사람 풀이Counter 객체를 썼는데 좋아보였다.파이썬 Counter 공식문서from collections import Counterdef solution(participant, completion): p = Counter(participant) c = Counter(completion) p-=c return [*p...
내 코드import heapqdef solution(word): D=[] def make(str1): if(str1!=''): heapq.heappush(D,str1) if(len(str1)==5): return for c in 'AEIOU': make(str1+c) make('') cnt=1 while(D[0]!=word): heapq.heappop(D) cnt+=1 return cnt재귀로 문자열을 만들었다.정렬을 해야하는데 O(NogN) 이 걸릴걸 우려해, 생성하면서 heap에 넣었다.heap에 넣는것도 O(logN)을 N 번 하므로 O(NlogN)이지만, 생성하면서..
내 코드 (입접 행렬)def solution(N, wires): T = [[False]*(N+1) for _ in range(N+1)] for u,v in wires: T[u][v] = True T[v][u] = True def dfs(V): visited=[False]*(N+1) visited[V]=True stk=[V] while stk: v = stk.pop() for i in range(1,N+1): if(T[v][i]==True and not visited[i]): visited[i]=True..