분류 전체보기 290

2. 팬레터 도메인 설계

회원가입 기능을 위해서는 보안을 좀 더 공부해야 할 것 같아 일단 팬레터부터 개발하려 한다. 팬레터 도메인의 어트리뷰트는 다음과 같다. ID: 정수(Long). 각 팬레터를 구분하기 위한 고유값. 생성되는 순서에 따라 순차적으로 부여함. 새 팬레터 객체 생성 시마다 1씩 증가. 제목: 문자열(String). 20글자 제한. 작성자아이디: 문자열(String). 20글자 제한. 수신인아이디: 문자열(String). 20글자 제한. 내용: 문자열(String). 200글자 제한. 후원금액: 정수(Integer). 원 단위. 좋아요 여부: 참/거짓(boolean). 수신인인 창작자가 좋아요를 눌렀는지 여부. 닉네임이 중복될 경우를 대비하여 작성자와 수인인은 아이디로 저장되도록 한다. 팬들의 경우 가입 시 중복..

프로젝트/띄움 2023.01.09

1. 요구사항 정리

띄움 웹 어플리케이션의 요구사항은 다음과 같다. 1. 앱 개요 팬이 창작자에게 팬레터를 보낼 수 있도록 하는 어플리케이션이다. 모든 팬레터는 후원금을 포함한다. 후원금의 최소금액은 1000원이다. 2. 회원 요구사항 회원은 팬, 창작자로 나뉜다. (관리자 계정은 일단 논외) 팬은 팬레터의 발신인만 될 수 있다. 팬은 자신만 볼 수 있는 마이페이지 및 편지함에서 자신의 팬레터 현황을 확인할 수 있다. 창작자는 팬레터의 수신인 및 발신인이 될 수 있다. 각 창작자는 사용자 모두에게 공개되는 창작자 페이지를 갖는다. 이 페이지에는 창작자가 받은 팬레터들이 표시된다. 3. 팬레터 요구사항 팬이 창작자에게, 혹은 창작자가 다른 창작자에게 보내는 응원 메시지이다. 기본적으로 텍스트가 포함되며, 후원금이 필수로 포함..

프로젝트/띄움 2023.01.09

3-1. 새로운 할인 정책 개발

이번 시간에는, 할인 정책이 변경되었다고 가정하고 그 할인 정책에 맞게 코드를 수정해볼 것이다. 현재 코드는 VIP 고객에게 1000원을 할인해주는 방식으로 짜여져있는데, 오늘은 VIP 고객에게 구매 가격의 10%를 할인해주는 코드를 짤 것이다. src > main > java > hello.core > discount 패키지 안에 DiscountPolicy를 implement하는 RateDiscountPolicy를 하나 만들어준다. 코드는 다음과 같이 채운다. member 가 VIP라면 구매가격의 10%를 return하고, 그렇지 않으면 0을 리턴하는 함수를 만들었다. 여기서 기억할 것이 있다. 알고리즘 문제를 풀 때, 나눗셈 때문에 낭패를 본 경험이 있을 것이다. 나눗셈은 오차를 발생시킨다. 그러므로..

#10971 : 외판원 순회 2

풀이방법 사용된 것: 백트래킹 2022.11.29 오답노트 #10971 : 외판원 순회 2 풀이방법 및 문제점 2022.11.23 이번 문제도 작은 실수로 인해 틀렸던 문제이다. 백트래킹 문제를 풀 때 절대 잊으면 안 되는 사항이기 때문에 오답노트에 적어두려 한다. 재귀를 통해 각 도시를 방 blowupmomo.tistory.com 재귀를 통해 각 도시를 방문하다가, 모든 도시를 빠짐없이 방문한 것이 확인되면 출발지로 다시 돌아가는 비용을 현재까지 쌓인 비용에 더한 뒤 이번 여정의 최종 비용으로 결정한다. 단, 마지막으로 방문한 도시에서 출발지로 돌아가는 길이 없다면 이번 여정은 무효로 처리하고 정답에 반영하지 않는다. 그 다음 모든 최종 비용 값 중 최솟값을 화면에 출력하여 문제를 해결한다. 코드 Ja..

오답노트 #10971 : 외판원 순회 2

풀이방법 및 문제점 2022.11.23 이번 문제도 작은 실수로 인해 틀렸던 문제이다. 백트래킹 문제를 풀 때 절대 잊으면 안 되는 부분이기 때문에 오답노트에 적어두려 한다. 재귀를 통해 각 도시를 방문하다가, 모든 도시를 빠짐없이 방문한 것이 확인되면 출발지로 다시 돌아가는 비용을 현재까지 쌓인 비용에 더한 뒤 이번 여정의 최종 비용으로 결정하기로 하였다. 단, 마지막으로 방문한 도시에서 출발지로 돌아가는 길이 없다면 이번 여정은 무효로 처리하고 정답에 반영하지 않는다. 그 다음 모든 최종 비용 값 중 최솟값을 화면에 출력하여 문제를 해결한다. 이러한 풀이 방식은 잘 짠 것이었다. 단, 백트래킹 문제를 풀 때 꼭 기억해야 하는 사항 하나를 깜빡하여 틀렸었다. 백트래킹이란, 갔던 길을 되돌아오기를 반복하..

Spring으로 옷 세탁 정보 관리 웹사이트 만들기

java 기반 프레임워크 Spring을 이용하여 옷의 세탁 방법에 대한 정보를 관리하는 백엔드 시스템을 구현해보자. 백엔드 중심의 프로젝트이며, 프론트엔드는 기초적인 정도만 사용한다. 목차 요구사항 정리 시스템 구성의 이해 개발 환경 준비 스프링 부트를 이용한 프로젝트 생성 도메인 만들기 리포지토리 만들기 리포지토리 테스트 서비스 만들기 서비스 테스트 SpringConfig 파일을 이용한 스프링 빈 등록 컨트롤러 및 html 구현 최종 테스트 요구사항 정리 먼저 시스템의 요구사항을 정리하자. 우리는 무엇을 만드는가 우리가 만들 것은, 사용자가 자신이 가지고 있는 옷의 세탁 정보를 저장하고, 조회하고, 삭제할 수 있는 웹사이트이다. 옷 정보 객체는 어떻게 생겼는가 각 옷 정보 객체는 다음의 정보를 담고 있..

#4436 : 엘프의 검

풀이방법 사용된 것: 브루트포스 2022.11.22 오답노트 #4436 : 엘프의 검 풀이방법 및 문제점 2022.11.22 사용한 방법은 다음과 같다. 0부터 9까지의 숫자가 담겨있는 해시셋을 선언한다. 수열에 특정 숫자가 나타날 때마다 그 숫자를 해시셋에서 remove()한다. 해시셋이 텅 blowupmomo.tistory.com 0부터 9까지의 숫자가 저장된 HashSet을 선언한다. 각 숫자가 등장할 때마다 HashSet에서 그 숫자를 remove()한다. HashSet이 텅 비는 순간 현재의 k를 출력한다. 형변환의 번거로움을 줄이기 위해 각 숫자는 Character형으로 다루었다. 그리고 곱하기를 하다 보면 숫자가 점점 커지므로, 곱한 값은 반드시 충분히 큰 정수형 데이터로 선언해주어야 한다...

오답노트 #4436 : 엘프의 검

풀이방법 및 문제점 2022.11.22 사용한 방법은 다음과 같다. 0부터 9까지의 숫자가 담겨있는 해시셋을 선언한다. 수열에 특정 숫자가 나타날 때마다 그 숫자를 해시셋에서 remove()한다. 해시셋이 텅 비게 되면 그 시점의 k를 출력한다. 형변환의 번거로움을 줄이기 위해 각 숫자는 int나 long이 아닌 Character형으로 하였다. 완벽한 풀이법이라고 생각했는데 33퍼센트에서 자꾸 틀렸습니다를 받는다. 무엇이 문제지...? 친구가 한 것처럼 boolean 배열이 모두 true가 되었을 때 정답을 확정하는 코드도 짜보았는데, 똑같이 33퍼센트에서 틀렸습니다를 받았다. 이걸 보니 풀이법 자체가 문제가 아닌 것 같다. 친구가 했을 때 정답 처리를 받은 코드를 내 식으로 짜보니 오답 처리가 되었기 ..

#2246 : 콘도 선정

풀이방법 사용된 것: 정렬 브루트포스 Comparator Overriding 2022.11.17 콘도 X가 후보가 될 수 있는 조건은 다음과 같다. X보다 바닷가에 더 가까운 콘도들은 모두 X보다 숙박비가 더 비싸다. X보다 숙박비가 더 싼 콘도들은 모두 X보다 바닷가에서 더 멀다. 거리 순으로 정렬한 후에 1번 조건을 체크하고, 가격 순으로 정렬한 후에 2번 조건을 체크한 후, 두 번의 체크 과정에서 한 번도 탈락하지 않은 콘도들의 개수를 세면 된다. 다음과 같은 방법으로 구현하였다. 1. Condo 클래스 정의 각각의 콘도는 Condo 객체로 저장된다. Condo 객체는 다음의 3가지 필드를 가진다. 바닷가로부터의 거리 d, 숙박비 c, 후보가 될 자격을 나타내는 boolean 타입 변수 check ..