
전체 글
[리트코드]740. Delete and Earn
class Solution: def deleteAndEarn(self, nums: List[int]) -> int: if not nums: return 0 freq = [0] * (max(nums)+1) for n in nums: freq[n] += n #print(freq) dp = [0] * len(freq) dp[1] = freq[1] for i in range(2, len(freq)): #print(freq[i], dp[i - 2], dp[i - 1]) dp[i] = max(freq[i] + dp[i-2], dp[i-1]) print(dp) 혼자서 풀어내지 못했다. 역시나 DP문제 나의생각방식 카운터로 모은다음에 곱해서 가장 큰 값을 기준으로 양옆보다 크면 더하고 양옆 없애버리고 아니면 그 다음 ..
[리트코드]18. 4Sum
class Solution: def fourSum(self, nums: List[int], target: int) -> List[List[int]]: #두개 고르고 투포인터 고르고 하나를 옮김 nums.sort() ans = [] for i in range(len(nums) - 3): for j in range(i + 1, len(nums) - 2): s, e = j + 1, len(nums) - 1 while s < e: sum = nums[i] + nums[j] + nums[s] + nums[e] if sum == target: if sorted([nums[i], nums[j], nums[s], nums[e]]) not in ans: ans.append([nums[i], nums[j], nums[s]..
[리트코드]16. 3Sum Closest
class Solution: def threeSumClosest(self, nums: List[int], target: int) -> int: diff = 1e9 nums = sorted(nums) for i in range(len(nums)): s, e = i + 1, len(nums)-1 while s < e: sum = nums[i] + nums[s] + nums[e] if abs(target - sum) < abs(diff): diff = target - sum if sum < target: s += 1 else: e -= 1 if diff == 0: break return target - diff ''' 투포인터문제 정렬하고 범위 줄여가면서 계산한다. '''
개인 프로젝트 시작
개인 프로젝트를 시작하려한다. 토이 프로젝트형식이지만 전문연 퇴사 후 여지껏 배운 내용을 총망라하여 개발을 진행해보려한다. 내가 전문연 기간에 수행한 프로젝트로는 웹 회사 면접에서 내 프로젝트에 대해 설명해 볼 건덕지도 없다는 것을 뼈저리게 깨닿고 지금이라도 열심히 제작해보려한다. 하루에 두 시간 정도 시간을 내서 진행할 것이고 어떤식으로 개발을 진행했는지 기술블로그에 남겨볼 예정이다. 주제는 맥덕(맥주 덕후)들을 위한 서비스. 가칭 맥덕이다. MSA로 제작되지만 백-프론트 방식으로만 나눠서 개발해도 될 정도의 크기일것 같다. 단순히 공부를 위해 MSA 형식으로 개발 해보는 것으로 프론트 엔드는 부분은 내가 지식이 별로 없기에 부트스트랩을 가져다 thymeleaf로 쓱삭쓱삭 만들까한다.
Spring Framework, Spring Boot 도대체 뭐가 다른거지?
Spring 공부를 하다보니 Spring 관련 해서 Spring boot(이하 boot)와 Spring Framework 가 뭐가 다른건지 궁금해졌다. 두 개가 무엇인지 개념부터 설명하겠다. Spring Framework의 탄생은 자바진영의 봄이 도래했다해서 프레임워크의 이름이 Spring이다. (기존의 자바진영에서 사용하던 EJB가 너무 별로였기 때문에 해당 프레임워크의 탄생을 모두가 두 손 들고 환영했다고) 스프링의 가장 큰 특징은 의존성주입(DI), 제어의 역전(IoC), 관점지향 프로그래밍(AOP) 로 들 수 있다. DI - 객체 사이의 의존 관계를 스프링 컨테이너가 자동으로 연결해 줌. 개발자가 객체를 직접 생성하지 않고 외부에서 주입시켜준다. IoC - 메소드나 객체를 개발자가 생성하는 것이 ..
짧은 푸념
요즘 조금 큰 IT기업 신규 개발자 채용에 개발 경력 2년, 3년 이하만 뽑는다는 공고가 이제는 너무 당연히 붙어있다. 뭐 신입과 개발 2,3년 해본 것은 물론 차이가 있기에 같은 선상에 놓으면 신입이 불리한 것은 맞다. 하지만 그것도 어떤 개발을 경력으로 쌓아 왔는지에 따라 차이가 크다. 나같은 경우 전문연 3년간 임베디드 개발을 해서 웹이나 앱 개발은 쌩 신입과 다를 바 없다. 실무를 경험해 본적이 없다는 이야기다... 근데 개발 경력을 하나로 퉁쳐서 지원을 막는건 나로써는 정말 복창 터질 일이다. 숨기지도 못한다 병역사항에 써야해서 ㅋㅋ 상시 공고는 대부분 3년 이상의 동일 경력을 가진 사람을 뽑으려 하는거 일텐데 내 임베디드 경력으로는 지금 해당되는 기업의 원하는 부서에 지원하면 7일 안으로 서탈..
[리트코드]1762. Buildings With an Ocean View
class Solution: def findBuildings(self, heights: List[int]) -> List[int]: stck = [] #비어있으면 넣고 #다음에 들어온게 더 크면 넣고 작으면 넣지 않는다. stck.append((heights[-1], len(heights)-1)) for i in range(len(heights)-1, -1, -1): if stck[-1][0] < heights[i]: stck.append((heights[i], i)) stck.sort(key = lambda x : x[1]) #print(stck) ans = [] for i in range(len(stck)): ans.append(stck[i][1]) return ans 미디움이라고 되어있지만 조금 쉬..
재취업 도전기
퇴사를 한 지 2달이 다되어간다. 시간 참 빠르다. 그 동안 많은 것들을 홀로 공부했다고 생각한다. Spring, MSA, JAVA11, SQL, JPA, NoSql, Python고급, Http&Network, Docker, k8s, js기본문법 등등.. 나열하기에도 참 많은 것들의 강의를 듣고 책을 읽고 공부하였다. 공부를 해보니 전회사에서 하던분야와 전혀 다른 분야, 엄청나게 다르다.. 실무를 경험해보거나 따로 공부하지 않으면 전혀 경력인정을 해줄수 없다는게 느껴질정도다. 네카라쿠배만 같은 IT대기업만을 꿈꾸기에는 임베디드 시스템 개발 3년 경력은 목표하는 경력직 채용공고의 jd와 비교해 매력이 없어보인다.. 그래도 가끔 원서를 써본곳도 있지만 코테에서 물먹은게 1~2차례 그게 화가나 빡시게 코딩테스..
Monolithic Architecture란 무엇인가?
Monolithic, MSA, SOA 정리 1편 Monolithic Architecture 개발되는 서비스의 모든 비즈니스 로직, UI, 데이터베이스 등을 한 곳에 다 때려넣고 운영하는 구조로 프로그램을 설계하는 방법이다. 하지만 소프트웨어의 규모가 커지고 복잡해지는 현 상황에서 대규모 서비스를 제작하기에는 합리적이지 않기에 서비스 개발 초기 빠른 개발을 위해 사용하더라도 해당 서비스가 어느정도 사업 모델로서 인정을 받고 기능들이 추가되면서 프로그램 복잡도가 높아진다면 MSA로 변경 작업을 거친다. 그렇기 때문에 처음부터 대규모 프로젝트를 생각했다면 사용되지 않는다. 장점 -하나의 언어와 프레임워크에 종속되어 구현하는 사람 입장에서는 하나의 언어와 프레임워크만 사용하면 된다. -하나의 프로그램을 실행하면..
081321 MSA_SpringCloud
Apigateway-service 해당 서비스는 rabbitmq, eureka-server(discovery-service), config-service를 사용한다. 도커 run 옵션을 줄때 환경변수를 세팅해서 연관된 서비스들과 연결될 수 있게 해야 한다. docker run -d -p 8000:8000 --network ecommerce-network -e "spring.cloud.config.uri=http://config-service:8888" \ -e "spring.rabbitmq.host=rabbitmq" \ -e "eureka.client.serviceUrl.defaultZone=http://discovery-service:8761/eureka/" \ --name apigateway-serv..