본문 바로가기

전체글139

[그리디] 모험가 길드 모험가 N 명이 있다. 모험가들은 각각의 공포도를 갖고 있다. 그래서 공포도가 X 인 모험가는 반드시 X 명 이상으로 구성한 모험가 그룹에 참여해야 여행을 떠날 수 있다. 최대 몇개의 모험가 그룹을 만들수 있는가? 예를 들어 N이 5이고 각 모험가 공포도가 2 3 1 2 2 라고 해보자. 이때 group1(1 2 3), group2(2 2) 이렇게 두개의 그룹을 만들 수 있다. 그런데 문제의 조건이 더 있다. 몇명의 모험가들은 그룹에 포함되지 않아도 된다. 다시말해 모든 모험가를 특정한 그룹에 넣을 필요는 없다. 이렇게 되면 group1(1), group2(2 2) 도 정답이 된다. 둘 다 답은 2로 같은데 group이 되는 과정이 달라서 헷갈렸다. 그리고 모험가들은 같은 공포도를 갖는다고 하더라도 개별.. 2021. 9. 23.
아주 작은 습관의 힘 팀리더분이 추천해준 아주 작은 습관의 힘 책을 읽고 나에게 맞게 정리했다. 1. 정체성을 스스로 만들자 나는 코틀린 언어 공부를 좋아한다 나는 알고리즘 자료구조 공부를 좋아한다 나는 쿠버네티스, 카프카 공부를 좋아한다 나는 수학문제 푸는것을 좋아한다 2. 실행 계획을 구체적으로 세우자 매일 자기전 11시 ~ 12시에 1시간 공부한다 매주 일요일 3시 ~ 6시에 공부한다 점심먹고 노곤함이 풀린 후 즉시 한다 3. 기존 환경에서 새로운 습관을 만들기 쉽지 않다 기존 환경에서 하던 기존 습관이 있기 때문 새로운 환경에서 새로운 습관을 형성해보자 카페에서 특정시간에 가서 공부를 한다던지 그리고 버리고 싶은 습관은 그걸 유발하는 것을 눈에 안보이도록 환경을 셋팅하자 특히 핸드폰 한 공간에서는 한가지 일만 해라 4.. 2021. 9. 22.
@RequestParam 사용 시 Null에 대한 고민 정리 RequestParam 애노테이션에서 required = false 인 경우, 값이 없을 때 null 로 채워진다. RequestParamMethodArgumentResolver 에서 request.getParameterValues(name) 가 null 이고 결국 리턴되는 arg는 null 이 된다. public class RequestParamMethodArgumentResolver extends AbstractNamedValueMethodArgumentResolver implements UriComponentsContributor { @Nullable protected Object resolveName(String name, MethodParameter parameter, NativeWebReque.. 2021. 9. 20.
리스트 객체를 특정 key 기준으로 grouping 그리고 merge 아래와 같이 Product 리스트가 있다고 해보자. Product 객체에는 id(고유 식별자), productId, itemNo(리스트) 필드가 있다. 여기서 id와 productId의 차이에 대한 설명은 비지니스 정책 이슈라 생략하려 한다. 중요한건 productId는 중복이 가능하다. 그래서 prodocutId를 기준으로 grouping 을 하고 itemNo 리스트값을 중복없이 merge 하려고 한다. List products = Arrays.asList( new Product("1", "a", Arrays.asList("11", "12", "13")), new Product("2", "a", Arrays.asList("12", "13", "14")), new Product("3", "b", Arra.. 2021. 9. 20.
[그리디] 큰 수의 법칙 n 개의 다양한 수로 이뤄진 배열이 있다. 그 수들을 m 번 더해서 가장 크게 만들어야 한다. 단, 배열안의 특정 수가 k번 초과해서 더해질 수는 없다. 예를들어 n이 5인 [2,4,5,4,6] 배열로 m이 8, k가 3(8번 더하지만 특정 수가 3번 초과하면 안됌)인 상황에서 가장 큰 수를 만드려면 6+6+6+5+6+6+6+5=46 이 된다. 그리고 서로 다른 인덱스지만 숫자가 같은 경우는 서로 다른 것으로 간주한다. 예를들어 [3,4,3,4,3] 인 배열에 m이 7이고 k가 2이면 4+4+4+4+4+4+4 = 28이 된다. 결국 배열에서 필요한 숫자는 가장 큰 수와 그다음 큰수 두개 뿐이다. 그래서 먼저 배열을 정렬하는게 첫 이슈인데 책에서 정렬까지 직접 구현하진 않았고 라이브러리를 이용했다. # 큰.. 2021. 9. 13.
@RequestParam 사용 시 주의사항 요즘은 스프링 컨트롤러를 만들 때 @GetMapping, @PostMapping 으로 HTTP Method 를 명시하거나, @RequestMapping을 쓰더라도 HTTP Method 를 명시적으로 추가하는게 일반적이다. 그런데 예전 레거시 스프링 컨트롤러를 재개발 하는 상황에서 @RequestMapping 에 HTTP Method 가 명시적으로 적혀있지 않거나, 있다고 하더라도 GET, POST 둘다 받도록 하는 경우가 있어 똑같이 맞춰서 개발해야 했다. GET + @RequestParam 인 경우는 query parameters(query string) 만 고려해서 처리하면 되서 간단한데, POST 요청까지도 같이 받는다면 @RequestParam 이 query parameters(query stri.. 2021. 9. 11.