탐욕 알고리즘(Greedy Algorithm)
·
BackEnd/알고리즘 공부
탐욕 알고리즘이란? 탐욕 알고리즘은 "매 선택에서 지금 이 순간 당장 최적인 답을 선택하여 적합한 결과를 도출하자"라는 방식이다. 더보기 5개의 도시를 모두 한 번씩만 거쳐서 여행하는 경로 중 기름값을 아끼기 위해 가능하면 짧은 경로를 이용하고 싶다고 가정하자. 가능한 120가지의 조합을 모두 살펴봐서 그중 가장 짧은 경로를 선택하는 것 "지금 내가 있는 도시에서 고를 수 있는 도로 중 가장 짧은 도로를 선택한다" (그리디 알고리즘) 탐욕 알고리즘이 문제를 해결하는 방법 1. 선택 절차(Selection Procedure) : 현재 상태에서의 최적의 해답을 선택한다. 2. 적절성 검사(Feasibility Check) : 선택된 해가 문제의 조건을 만족하는지 검사한다. 3. 해답 검사(Solution C..
API 개발 기본
·
BackEnd/실전! 스프링 부트와 JPA 활용2
회원 등록 API 회원을 등록하기 위한 API를 만드는 단계이다. 버전 1 @RestController @RequiredArgsConstructor public class MemberApiController { private final MemberService memberService; @PostMapping("/api/v1/members") public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member){ Long id = memberService.join(member); return new CreateMemberResponse(id); } @Data static class CreateMemberResponse { private L..
웹 계층 개발(상품)
·
BackEnd/실전! 스프링 부트와 JPA 활용1
상품 등록 상품 등록 폼 @Getter @Setter public class BookForm { private Long id; private String name; private int price; private int stockQuantity; private String author; private String isbn; } 상품 등록 컨트롤러 @Controller @RequiredArgsConstructor public class ItemController { private final ItemService itemService; //상품등록 화면 띄우기 @GetMapping("/items/new") public String createForm(Model model){ model.addAttribute..
변경 감지와 병합(merge)
·
BackEnd/실전! 스프링 부트와 JPA 활용1
준영속 엔티티 영속 상태이면 그 엔티티의 값만 바꾸면 JPA가 커밋 시점에 값을 바꿔준다. 하지만 준영속 엔티티일 때는 문제가 생긴다. 준영속 엔티티는 영속성 콘텍스트가 더는 관리하지 않는 엔티티를 말한다. 우리 예제에서는 itemService.saveItem(book)에서 수정을 시도하는 Book객체다. 수정을 할 때는 DB에 한번 저장되어 있던 것을 다시 꺼내와 임의로 엔티티로 다시 만드는 것이다. 이렇게 DB에서 저장되었다가 다시 꺼내온 엔티티를 준영속 엔티티로 볼 수 있다.(임의로 만들어낸 엔티티도 기존 식별자를 가지고 있는 경우 = id를 가지고 있는경우) 준영속 엔티티를 수정하는 2가지 방법 변경 감지 기능 사용 //ItemService @Transactional public void upda..
웹 계층 개발(회원)
·
BackEnd/실전! 스프링 부트와 JPA 활용1
홈 화면과 레이아웃 홈 화면은 회원 기능, 상품 기능, 주문 기능을 선택할 수 있게 해주는 곳이다. 홈 컨트롤러 @Controller @Slf4j public class HomeController { @RequestMapping("/") public String home(){ log.info("home controller"); return "home"; } } 홈 컨트롤러는 springBoot에서 늘 사용하던 컨트롤러이다. 제일 처음 home이기 때문에 RequestMapping이 /임을 알 수 있다. return은 home.html을 나타낸다. @Slf4j는 log를 사용할 수 있게 해준다. 강의에서 주는 html 파일을 templates 패키지에 추가하면 화면이 나온다. 예제에서는 뷰 템플릿을 최대한..
트리의 순회(백준_2263)
·
BackEnd/알고리즘 공부
https://www.acmicpc.net/problem/2263 2263번: 트리의 순회 첫째 줄에 n(1 ≤ n ≤ 100,000)이 주어진다. 다음 줄에는 인오더를 나타내는 n개의 자연수가 주어지고, 그 다음 줄에는 같은 식으로 포스트오더가 주어진다. www.acmicpc.net 문제 설명 문제는 간단하다. 특정 이진 트리에 대한 인오더와 포스오더가 주어지면 이것을 토대로 프리오더로 구하는 것이다. 참고 자료 트리를 순회하는 방법은 크게 3가지가 있다. 프리오더(Pre-order) : 전위 순회 인오더(In-order) : 중위 순회 포스트오더(Post-order) : 후위 순회 프리오더(Pre-order) 프리오더는 그래프의 DFS와 순서가 같다. 루트노드 방문 왼쪽 자식 노드를 루트로 하는 서브..