본문 바로가기

전체 글

(22)
싱글 링크드리스트 삭제하기 싱글 링크드 리스트에서 현재 노드 cur 를 삭제하려면 다음 두 단계로 수행할 수 있음: 1. cur 의 이전 노드 prev 와 next 노드를 찾는다: 2. prev를 cur의 next 노드로 연결: 첫 번째 단계에서는, 우리는 prev와 next 를 알아내야 함. 그 다음은 cur reference를 사용하여 쉽게 찾을 수 있음. 그러나, 우리는 평균 O(N) 시간이 걸리는 prev를 찾기 위해 헤드 노드에서 링크드리스드를 순회해야 한다. 여기서 N은 링크드리스드의 길이이다. 따라서 노드를 삭제하는 데 걸리는 시간은 O(N)이 된다. 포인터를 저장하기 위해 일정한 공간만 필요하기 때문에 공간 복잡도는 O(1)이다. https://leetcode.com/explore/learn/card/linked-..
싱글 링크드리스트 추가하기 주어진 노드 이전 뒤에 새 값을 추가하기: 1. 지정된 값으로 새 노드 cur를 초기화 2. cur의 next 를 prev의 next node인 next 에 연결함 3. prev의 next를 cur에 연결시킴. 배열과 달리 삽입된 요소를 지나 모든 요소를 ​​이동할 필요가 없음. 따라서 O(1) 시간 복잡도를 가지는 링크드리스트에 새 노드를 삽입할 수 있으며 매우 효율적임. https://leetcode.com/explore/learn/card/linked-list/209/singly-linked-list/1288/ Account Login - LeetCode Level up your coding skills and quickly land a job. This is the best place to ex..
React CRA 환경에서 eject하지 않고 Webpack 커스텀하기 Asia-Pacific(APAC) 지역에서 담당하는 프로젝트의 Repository를 fork하여 Korea에 서비스를 할 수 있게 환경을 구축하는 프로젝트를 맡게 되었다. 클라이언트 프로젝트 환경은 Typescript 기반의 리액트로 만들어져 있고, CRA로 생성된것으로 확인하였다. 우리팀은 대부분은 MacOS 기반에서 개발을 하지만, 간혹 Windows를 사용하시는 분들 위해 Mac/Linux/Windows 용의 스크립트를 만들고, 각 서버 환경별 Docker Container 배포를 위한 Dockerfile 만들어서 Korea 인프라팀에게 공유하였다. 그러나 프로젝트가 물흐르듯이 진행되다가 문제가 발생하였다. 디자인 팀의 퍼블리싱하시는 분이 마크업을 진행하실 때 CSS로 S3 bucket을 Full ..
동적 계획법 흔히 동적 계획법을 동적 프로그래밍이라고도 부르는데, 일반적으로 사용하는 동적(dynamic), 혹은 프로그래밍(programming) 이런 단어와는 전혀 관련이 없다. 따라서 dynamic programming은 동적 계획법이다. 동적계획법은 거의 대부분 재귀적 알고리즘과 반복적으로 호출되는 문제를 찾아가는 것이 관건이다. 하지만 재귀(recursive) 를 사용해서 스택 layer에 계속 추가를해서 깊이가 깊어 질수록 많은 메모리를 사용해서 메모제이션 기법으로 두번 이상 반복 계산되는 부분 문제들의 답을 저장함으로써 속도를 꾀할 수 있다. 재귀를 사용해서 푸는 문제중 가장 대표적인 피보나치 수열을 통해 동적 계획법을 적용해보자. int fibonacci(int i) { if (i == 0) retur..
Anagram 문제풀기 Anagram이란? https://m.blog.naver.com/PostView.nhn?blogId=r_mento&logNo=90174514542&proxyReferer=https:%2F%2Fwww.google.com%2F 글자 순서의 비밀! 아나그램(Anagram)이란? ▶"1등급 국어영역 공부비법 리딩멘토 바로가기" 아나그램이란? 아나그램이란 한 단어의 철자를 분해해 다... blog.naver.com Two strings, and , are called anagrams if they contain all the same characters in the same frequencies. For example, the anagrams of CAT are CAT, ACT, TAC, TCA, ATC, and..
Device 체크 자바스크립트 if (navigator.userAgent.match(/Mobile|iP(hone|od)|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/)) { //스마트폰일 때 실행 될 스크립트 //alert("1"); } if (navigator.userAgent.match(/Android|Mobile|iP(hone|od|ad)|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolph..
Palindrome(회문) 알고리즘 Palindrome이라는 단어가 뭔지 몰랐는데 문제를 읽고 문자열이 데칼코마니를 만들어내면 풀 수 있다고 생각함. Sample Input madam → O maddam → O pppaapp → X sziofsjifzsfwu8 -> X Palindrome란? 팰린드롬이란 우리 말로 ‘회문(回文)’으로 번역되며 ‘eye' 'madam'처럼 역순으로 읽어도 같은 말이나 구절 또는 숫자를 말하며, 일반적으로 단어 사이 구두점과 뛰어 쓰기 조정은 허용된다. 이 문제를 접근할땐 시간복잡도로 O(N)의 복잡도를 가질필요가 없다고 생각함. O(N/2)의 복잡도를 가지면서 left는 인덱스를 그대로 증가하면서 right은 배열의 길이에 증가된 인덱스만큼 감소시키면 적절하게 풀 수 있을거라 생각함. public stati..
Could not write JSON: Infinite recursion 원인 1. JPA 연관관계에서 양방향 매핑을 선언한 경우 발생 2. Jackson lib 의 ObjectMapper 객체에 의해 컨트롤러 단에서 JSON 타입을 변환하는 도중에 변환되는 엔티티의 필드가 다른 엔티티를 참조하고 그 엔티티 클래스의 필드가 또 다른 엔티티를 참조하는 stackoverflow 발생 @Entity @Table(name = "post") @Where(clause = "deleted IS NULL") @Data @NoArgsConstructor @AllArgsConstructor @Builder public class Post { @ManyToMany @JoinTable(name = "post_hashtags", joinColumns = @JoinColumn(name = "post_..