https://school.programmers.co.kr/learn/courses/30/lessons/43238 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 위의 문제에 대한 풀이입니다. 우선 처음 단순히 생각하면 1명 처리 -> 처리 시간 입력, ...... n명 처리 -> 처리 시간 입력으로 입국 심사 횟수 N을 기준으로 O(N) 짜리 풀이를 생각했다. 하지만 이럴 경우, 10억회의 연산 발생으로 시간초과가 난다. (이 오답 풀이는 맨 아래에 첨부하겠다.) 따라서 O(N) 보다 빠른 풀이, 혹은 심사위원의 수 ( 10만 ) 으로 문제를 굴려야 하는..
JSP, Thymeleaf: 서버에서 모든 데이터를 만들어서 브라우저에 전송하는 SSR 방식 요즘은 이런 SSR 방식이 아닌, CSR(Client Side Rendering) 을 사용하고, 점차 하나의 단독적인 애플리케이션으로 동작하는 SPA(Single Page Application)의 형태로 변화 중이다. 따라서 최근의 서버는 클라이언트가 원하는 XML, JSON 데이터를 제공하는 API 서버 방식이 주류이다. [API 서버] 요청받은 데이터만을 제공하는 서버 데이터만을 전달함으로써, 클라이언트 영역이 어떻게 구현되는지 상관 없이 구현할 수 있고, 클라이언트에서 자유롭게 전달 받은 데이터를 사용할 수 있어 유동성이 좋다. 이번 글에선 JSON을 이용하는 API 서버의 구성 방법에 대해 알아보자. AP..
*이번 게시물은 다양한 블로그에서 소스를 가져왔습니다. 이번 글에선 Controller에서 사용되는 Get, Post 방식의 차이점과 @ModelAttribute, @ResponseBody, @RequestParam 과 같은 컨트롤러 영역에서 사용하는 어노테이션 그리고 컨트롤러 영역의 동작 과정 등에 대해 설명하며 Controller Client간의 교류에 대해 설명하겠다. 우선 Get 과 Post 방식의 근본적인 차이점에 대해 알아보자. Get: 파라미터로 Model 사용. url로 정보가 노출된다. Post: RedirectAttribute로 Http의 Body에 정보가 숨겨져서 전달된다. 이번엔 컨트롤러에서 데이터를 전달받는 다양한 방법에 대해 알아보자. PathVariable Ex) Front 단..
이 글은 앞서 포스팅한 아래의 글과 이어지는 글 입니다. https://codenme.tistory.com/58 Spring security란? 스프링 시큐리티를 통한 작업은 크게 2가지로 나눌 수 있다. 인증(Authentication): 해당 사용자가 본인이 맞는지를 확인 인가(Authorization): 인증된 사용자가 요청한 자원에 접근 가능한지 확인 유저가 codenme.tistory.com [OAuth] 서비스 제공 업체들이 각자 다른 방식으로 로그인하지 않도록 제공하는 공통의 인증 방식. 기존에 사용자와 관리자, 2가지의 ROLE로 유저가 구분되었지만, OAuth를 사용하면, 구글, 네이버 등의 소셜 로그인 서비스를 제공하는 제 3의 인물을 포함해야한다. 나는 Google의 소셜 로그인 서비..
스프링 시큐리티를 통한 작업은 크게 2가지로 나눌 수 있다. 인증(Authentication): 해당 사용자가 본인이 맞는지를 확인 인가(Authorization): 인증된 사용자가 요청한 자원에 접근 가능한지 확인 유저가 어떠한 것을 요청하면, 해당 유저가 본인이 맞는가? 에 대한 인증을 거친 뒤, 인증(Authentication)을 통해 확인한 유저가 요청한 것을 받을 자격이 있는지 확인하는 인가(Authorization) 를 거친 뒤, 요청한 결과값을 돌려준다. 보통의 필터는 스프링의 빈을 사용할 수 없기 때문에 별도의 클래스를 상속 받아야 하지만, 스프링 시큐리티는 빈과 연동할 수 있는 구조로 설계되어있다. [Authentication: 인증] 스프링 시큐리티 내에서는 Filter Chain이라는..
[ n개의 숫자를 전부 사용해서 만들 수 있는 모든 순열의 갯수] ex) 1,2,2 가 input으로 들어오면 1,2,2 2,1,2 2,2,1 3가지가 나온다. 여기서 중요한 점은 "중복된 순열은 제거" 된다는 점이다. 1,2( 1th ) , 2( 2th ) 1, 2( 2th ) , 2( 1th ) 이런식으로 사실 상 같은 순열이 2번 추출되면 안된다는 뜻이다. 이때 사용하는게 바로 C++ 헤더 중 #include 으로 사용할 수 있는 next_permutation이다. 우리가 원하는 결과 값은 1,2,2 2,1,2 2,2,1 이렇게 3개인데, next_permuation( vec.begin(),vec.end() ) 이 메소드가 하는 역할은 vec를 중복되지 않은 다음 순열 값으로 변경해주는 것이다. 처..
https://school.programmers.co.kr/learn/courses/30/lessons/42746 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 위 문제에 대한 풀이 입니다. 결국 각 입력값들은 하나의 "덩어리" 이다. ex) 402, 40 -> 402 // 40 은 각각 덩어리. 따라서 각 숫자간의 관계에서 어느 숫자가 앞에오는가? 만 정하면 된다. ex1) 402, 432 432,402 > 402,432 -> 432가 먼저와야한다. ex2) 6, 543 6,543 >543,6 -> 6이 먼저와야한다. ex3) 4,43 4,43 > 43..
Stream: 자바8부터 추가된 기능입니다. 기존에 배열의 원소, 혹은 Collection을 가공할 때는 forEach(), 혹은 for문을 통해 하나씩 가공을 진행했지만, Stream을 사용하면 람다함수형식을 통하여 깔끔하게 한번에 가공할 수 있게 되었습니다. 가공하는 방식에는 Map, Filter, Sorted 등이 존재합니다. 1. Stream 생성 [콜렉션 -> 스트림] List, Set과 같이 Collection 인터페이스를 구현한 객체는 .stream()을 통해서 변경가능하다. // List로부터 스트림을 생성 List list = Arrays.asList("a", "b", "c"); Stream listStream = list.stream(); [배열 -> 스트림] Stream의 of() 메..