분류 전체보기

    [TIL/fairer] 2022-05-14 jpa로직 구현

    😊 Today I Learned 집안일 전체 조회 API - jwt token 적용 집안일 전체 조회 API를 개발할 때, 날짜를 받아와서 해당 날짜에 해당하는 집안일을 리턴하도록 했었다. 로그인 기능이 구현되고, jwt가 추가되면서 토큰을 통해 memberId를 받아와서 날짜 + memberId까지 조인해서 가져와야 했다. jwt는 나중에 수정하더라도 memberId까지 받아서 가져오도록 설계했어야 했는데, 지금까지 날짜만 받아 모든 유저의 집안일을 가져오도록 구현하고 있었다는게 충격이었다. 이정도로 기본적인 부분도 놓치고 있었다니..😇 HouseWorkController 수정 전 @GetMapping(value = "") public ResponseEntity getHouseWork(@RequestP..

    [Java] 백준 #1780 종이의 개수

    https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수 www.acmicpc.net N x N 행렬 종이 → 각각 -1, 0, 1 중 하나 저장 규칙에 따라 적절한 크기로 종이 자르기 종이가 모두 같은 수 → 그대로 사용 모두 같은 수 x → 같은 크기의 종이 9개로 자르고 각각의 잘린 종이에 대하여 1번 과정 반복 이와같이 종이를 잘랐을 때 -1, 0, 1로만 채워진 종이의 개수 각각 구하기 N은 3^k꼴, 1 ≤ N ≤ 3^7 💡 알고리즘 분할 정복, 재귀 💡 접근..

    [Algorithm/Python] BFS/DFS 이해하기

    💡 DFS(Depth First Search) : 깊이 우선 탐색 → 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 미로에 갇혔을 때, 가던 길이 막히면 가장 최근에 있었던 갈림길로 되돌아간다 → 스택 연상 가능 ** 스택에 지나온 경로를 저장하자 ** 탐색 시작 노드를 스택에 push → 방문 처리 스택이 공백이 아니면 하나의 위치를 꺼냄 → 현재 위치 → 방문 처리 꺼낸 현재 위치가 출구 → 탐색 성공 출구가 아니다 → 상하좌우 이웃한 방들을 살펴봄 → 갈 수 있는 모든 방들을 스택에 push → 반복 O(N)의 시간이 소요되고, DFS는 스택을 사용하는 알고리즘 → 실제 구현은 재귀 함수를 이용했을 때 매우 간결하게 구현할 수 있다. [구현] graph = [[], [2, 3, 8], [1, ..

    [Python] 백준 #18111 마인크래프트

    18111번: 마인크래프트 (acmicpc.net) 18111번: 마인크래프트 팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 www.acmicpc.net 땅의 높이를 모두 동일하게 만드는 ‘땅 고르기’ 작업 세로N, 가로M 크기의 집터, 맨 왼쪽 위의 좌표 (0, 0) 좌표 (i, j)의 가장 위에 있는 블록 → 인벤토리 : 1초 인벤토리 → 좌표 (i, j)의 가장 위에 있는 블록 위에 놓음 : 2초 0 ≤ 땅의 높이 ≤ 256 땅을 고르는 데 걸리는 최소시간의 (시간, 높이) 출력 (높이가 가장 높은 답) 💡 알고리즘 구현, 브루트포스 알고리즘 💡 접근 처음..

    [Spring] 스프링 Bean과 의존관계 - 컴포넌트 스캔 & 자동 의존관계 vs 스프링 Bean 직접 등록

    Spring Bean이란? → Class와 new를 통해 생성된 객체가 아닌, Spring에 의하여 생성되고 관리되는 자바 객체 의존관계란? 예를 들어, Controller와 view template가 필요한 상황 → memberController 생성해야함 → memberService를 통해 회원가입을 하고, data를 조회해야함 ↔ 의존관계가 있다! 🌳 컴포넌트 스캔과 자동 의존관계 설정 1. MemberController 생성, 의존관계 추가 @Controller public class MemberController { private final MemberService memberService; @Autowired public MemberController(MemberService memberSer..

    [Python] 백준 #10989 수 정렬하기 3

    10989번: 수 정렬하기 3 (acmicpc.net) 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. www.acmicpc.net N개의 수 오름차순 정렬 N의 범위 (1 ≤ N ≤ 10,000,000), 최대 10,000개 정렬 💡 알고리즘 정렬 💡 접근 퀵 정렬을 사용한 재귀함수로 풀면.. 계속 수정해봐도 메모리 초과가 뜬다. 스터디 자료를 복습하면서, 계수 정렬을 이용해보았다. [계수 정렬] 특정 조건이 부합할 때만 사용할 수 있지만, 매우 빠른 알고리즘 데이터가 양의 정수, 데이터 개수가 N, 데이터의 최대값이 K일 때, 최악의 경우에도 O(N + ..

    [Python] 백준 #11866 요세푸스 문제 0

    11866번: 요세푸스 문제 0 (acmicpc.net) 11866번: 요세푸스 문제 0 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000) www.acmicpc.net N명의 사람이 원을 이루며 앉아있음 K번째 사람을 제거 → N명의 사람이 모두 제거될 때까지 계속 제거 원에서 사람들이 제거되는 순서 ↔ (N,K)-요세푸스 순열 💡 알고리즘 구현, 자료구조, 큐 💡 접근 [Python] 백준 #1966 프린터 큐 (tistory.com) 풀다가 이 문제가 생각나서 deque으로 수월하게 해결하였다. → while문으로 카운트를 세면서 조건을 확인하고, 맞다면 result에 저장하고 pop 아니라면 맨 뒤로 보내고 pop 💡 코드 from collection..

    [Python] 백준 #7568 덩치

    7568번: 덩치 (acmicpc.net) 7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 💡 알고리즘 구현, 브루트포스 알고리즘 💡 접근 방법 덩치 (x kg, y cm) A, B의 덩치 (x, y) (p, q) 덩치가 더 크려면 x > p, y > q 덩치 등수 : 자신보다 큰 덩치 사람의 수 + 1 같은 덩치 등수 여러명도 가능 2등이 3명 → 3, 4등 없음 N명의 몸무게, 키를 읽어서 각 사람의 덩치 등수 계산하여 출력 “덩치 등수 : 자신보다 큰 덩치 사람의 수 + 1” 조건에 집중해서..

    [Spring] 회원 관리 예제 02 - 회원 서비스 개발 → Test Code 작성

    🌳 회원 Service 개발 회원가입 수정 전 @Service public class MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository(); // 회원가입 public Long join(Member member){ Optional result = memberRepository.findByName(member.getName()) result.ifPresent(m -> { throw new IllegalStateException("이미 존재하는 회원입니다."); }); return member.getId(); } ▪ @Service 어노테이션을 통해 스프링 컨테이너에 등록된다 ▪ ifPrese..

    [Spring] 회원 관리 예제 01 - 비즈니스 요구사항 정리, domain & repository 생성 → Test code 작성

    🌳 비즈니스 요구사항 정리 데이터 : 회원ID, 이름 기능 : 회원 등록, 회원 조회 DB : 아직 어떤 DB를 사용할지 정해지지 않은 가상의 시나리오 ▪ 따라서 인터페이스로 구현 클래스를 변경할 수 있도록 설계 → 구현체를 통해 가벼운 메모리 기반의 데이터 저장소 사용 ▪ 테스트 프레임워크 → junit 일반적인 웹 애플리케이션 계층 구조 ▪ controller → 웹 MVC의 컨트롤러 역할 ▪ service → 핵심 비즈니스 로직 구현 ▪ repository → 데이터베이스에 직접 접근, 도메인 객체를 DB에 저장하고 관리 → Node에서 사용했던 model과 비슷한 역할이라고 생각하면 될 듯 하다 ▪ domain → 비즈니스 도메인 객체 → 회원, 주문 등등 주로 DB에 저장하고 관리되어지는 객체 ..

    [Spring] 정적 컨텐츠, MVC와 템플릿 엔진, API

    🌳 웹 개발 기초 정적 컨텐츠 서버의 관여없이 파일을 그대로 웹브라우저에 내려주는 컨텐츠 ex) welcome page MVC와 템플릿 엔진 서버에서 프로그래밍하여 동적으로 바꾸어 내려주는 컨텐츠 controller, model, view등의 패턴이 필요 ex) jsp, php API JSON 데이터 포맷을 사용하여 클라이언트에게 정보를 전달하는 방식 🌳 정적 컨텐츠 스프링은 정적 컨텐츠 기능을 자동으로 제공한다 → 원하는 파일을 넣으면 그대로 반환이 된다 hello-static.html 정적 컨텐츠 입니다. [동작 과정] 내장 톰캣서버가 요청을 받아 스프링에게 넘긴다 controller 내에서 hello-static을 찾는다 controller에 없으면 resources에서 hello-static을 찾..

    [Spring] 환경 구축, 라이브러리, thymeleaf 템플릿 엔진 동작 원리

    🌳 프로젝트 생성 java 11 설치 Maven / Gradle Project Maven → pom.xml을 이용하여 정형화된 빌드 시스템을 제공 Gradle → 유연한 범용 빌드 도구 제공 Gradle이 시기적으로 늦게 나온만큼 뛰어난 스펙을 갖고있고, 동적인 빌드 시스템을 xml로 정의하기에는 어려운 부분이 많다 ↔ 요즘은 다들 Gradle로 넘어오는 추세라고 한다. Spring boot Spring boot를 통해 간단하게 프로젝트를 생성할 수 있다. main과 test 디렉토리를 나누는것이 요즘 디폴트 test에는 작성한 코드들에 대한 테스트코드들이 들어가는데, 실무에서 빠질 수 없는 매우 중요한 코드라고 한다. resources에는 설정파일이 위치하는데, java파일을 제외한 모든 파일들이 위치..