2022-06-30 목요일

우형에 입사하고 거의 한달이 되간다. 전직장인 쿠팡과 비교해서 우형은 비슷하면서 정말 다른 회사라는걸 느낀다. 일단 비슷하게 느껴지는건 개발환경이나 개발문화같은거다. 어떤 프로젝트를 하는데 기술이나 언어적인 제약이 딱히 없이 그때그때 팀에서 모여서 정하고 등 개발적인 부분에 대해서는 쿠팡과 비교해서 아직까지는 겉만 핥았지만 비슷한 느낌인것 같다. 정말 180도 다르다고 느낀건 문화다. 우형에 와서 느낀거지..

normal diary 2022.06.30 0

데이터 엔지니어 경력 5년 이직준비 후기

자소서 : http://qkqhxla1.tistory.com/797 면접 후기 : http://qkqhxla1.tistory.com/799 내가 한 공부들과 방법 : http://qkqhxla1.tistory.com/802 취업을 위한 알고리즘 공부법 : http://qkqhxla1.tistory.com/990 데이터 엔지니어 경력 5년 이직준비 후기 : https://qkqhxla1.tistory.com/1193 오랫만에 글을 쓴다. 최근 두달동안 글이 없었는데 모든걸 이직준비에 올인하느라 글이 없었다. 제목에 적었듯이..

memo 2022.04.27 0

leetcode 1995, 2078(two pointer), 744(이분 탐색)

1995 https://leetcode.com/problems/count-special-quadruplets/ easy문제인데 O(n^2)의 시간복잡도로 풀려고 생각해보자. a+b+c=d가 나와야 하는데 c를 넘기면 a+b=d-c로 만들수 있다. 그리고 요 두파트를 각각 계산하면 된다. https://leetcode.com/problems/count-special-quadruplets/discuss/1446988/JavaC%2B%2BPython3-Real-O(n2)-solution class Solution: def countQuadruplets(self, nums: List[int]) -> int: # a +..

problem solving 2022.02.23 0

leetcode 1763(브루트포스), 1099(two pointer), 395(구현), 1071(구현)

1763 https://leetcode.com/problems/longest-nice-substring/ easy 로 분류되었는데 medium 하위정도 되는것같다. O(n^2)으로 모든 경우를 탐색한다. 길게 좌우에서 조여오면서 탐색한다. cur_s는 l과 r이 움직임에 따라 만들어지는 부분적인 문자열이고, cur_s내의 모든 문자가 대문자와 소문자가 cur_s내에 존재해야 하면서 이게 이전 길이보다 더 길면 바꿔준다. class Solution: def longestNiceSubstring(self, s: str) ->..

problem solving 2022.01.23 0

leetcode 974(prefix sum), 1375(구현;), 93(백트래킹), 616(merge interval)

974 https://leetcode.com/problems/subarray-sums-divisible-by-k/ subarray의 합이 k로 나눠지는 subarray를 구해야하는데 인덱스와 상관없이 구하는게 아니라 근처의 값들로만 구성해야 해서 백트래킹같은게 아니다. 앞에서부터 prefix sum을 계산해주며 prefix sum이 k로 나눠지면 그 값이 존재하는만큼 더해준다. 그리고 뒤에서도 사용하기 위해 그 값이 나온만큼 증가시켜준다. class Solution: def subarraysDivByK(self,..

problem solving 2022.01.03 1

leetcode 2024(sliding window), 424(sliding window), 498(대각 행렬), 99(s트리)

2024 https://leetcode.com/problems/maximize-the-confusion-of-an-exam/ 바로 앞글의 1004번 문제랑 똑같다. 근데 이번엔 T나 F의 최대값으로 만들어야 한다. 그러면 간단하게는 T일경우의 최댓값과 F일경우의 최댓값을 구해서 그중에 최댓값을 리턴하면 된다. class Solution: def maxConsecutiveAnswers(self, ans: str, k: int) -> int: #ans = 'TFFT' #k = 1 l,r = 0,0 d = {'T':0, 'F':0} ret = 0 while r < len(ans): #p..

problem solving 2021.12.30 0

pyspark read mongodb, mysql

이전에 이거 관련해서 글을 썼었는데.. 너무 뒤죽박죽한 글 구성 + 잘 모르는데 여기저기서 이상하게 갖다붙힘 + 버전이 낮아짐에 따라 쓸모 없어진 글이 되버려서 이전 글은 삭제하고 다시 좀 다듬어서 정리합니다. 현재 쓰고있는 spark 3 버전 초반 기준입니다. 1. mongodb 공식 api : https://docs.mongodb.com/spark-connector/current/python-api/ 몽고디비에서 데이터를 읽는 예시를 예로 듦. https://docs.mongodb.com/sp..

data engineering 2021.12.28 0

leetcode 935(dp), 503(monotonic stack), 1004(sliding window), 340(sliding window)

935 https://leetcode.com/problems/knight-dialer/ 미리 다음에 갈수 있는 길들을 저장해놓는다. 그리고 n번만큼 반복해주면서 메모이제이션으로 한번 했던 계산은 하지 않도록 조절한다. class Solution: def knightDialer(self, n: int) -> int: #n=3131 d = {-1: range(10), 0: [4,6], 1: [6,8], 2: [7,9], 3: [4,8], 4: [0,3,9], 5: [], 6: [0,1,7], 7: [2,6], 8: [1,3], 9: [2,4]} cache = {} def dp(n, path): if n == 0:..

problem solving 2021.12.27 0

leetcode 1405(그리디+heap), 143(linked list), 370(prefix sum), 739(stack, heap)

1405 https://leetcode.com/problems/longest-happy-string/ 단순히 dfs로 짜면 시간초과가 나왔다. 더 효율적으로 생각해보다가 가장 긴 길이를 만들어내려면 현재 존재하는 a,b,c중에서 가장 많이 존재하는 단어를 먼저 사용하는 전략으로 결과값을 만들어야 한다. 단어와 단어 카운트를 기반으로 힙을 만들어준 후 남아있는 단어중 갯수가 가장 많이 남아있는것부터 빼서 계산하는식으로 처리한다. from heapq import * class..

problem solving 2021.12.25 0