'분류 전체보기'에 해당되는 글 84건
- 2020.04.17 :: [BOJ/2156] 포도주 시식
- 2020.04.17 :: 스프링(Spring) Controller 객체 구현 2
- 2020.04.17 :: 스프링(Spring) Controller 객체 구현 1
- 2020.04.17 :: VMware 설치
- 2020.04.17 :: VirtualBox 설치
- 2020.04.16 :: [BOJ/9465] 스티커
- 2020.04.16 :: [BOJ/11057] 오르막 수
- 2020.04.16 :: 스프링(Spring) Service & DAO 객체 구현
- 2020.04.16 :: 스프링(Spring) 한글 처리
- 2020.04.16 :: 스프링(Spring) MVC 웹 서비스
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
문제 링크
- https://www.acmicpc.net/problem/2156
사용 알고리즘
- DP
풀이
- d[i][j] = i번째 포도주까지 마셨을 때의 최대 포도주의 양. i번째 포도주는 j번 연속으로 마심
- d[i][0] = max(d[i - 1][0], d[i - 1][1], d[i - 1][2])
- d[i][1] = d[i - 1][0] + p[i]
- d[i][2] = d[i - 1][1] + p[i]
소스 코드
- https://github.com/moomini/algorithm/blob/master/boj/2156.cpp
#include <cstdio>
#include <algorithm>
using namespace std;
int d[10003][3];
int p[10003];
int main(void) {
int n; scanf("%d", &n);
for (int i = 1; i <= n; ++i) scanf("%d", &p[i]);
for (int i = 1; i <= n; ++i) {
d[i][0] = max(d[i - 1][0], max(d[i - 1][1], d[i - 1][2]));
d[i][1] = d[i - 1][0] + p[i];
d[i][2] = d[i - 1][1] + p[i];
}
printf("%d\n", max(d[n][0], max(d[n][1], d[n][2])));
return 0;
}
|
'Algorithm > Problem Solving' 카테고리의 다른 글
[BOJ/11055] 가장 큰 증가 부분 수열 (0) | 2020.04.18 |
---|---|
[BOJ/11053] 가장 긴 증가하는 부분 수열 (0) | 2020.04.17 |
[BOJ/9465] 스티커 (0) | 2020.04.16 |
[BOJ/11057] 오르막 수 (0) | 2020.04.16 |
[BOJ/10844] 쉬운 계단 수 (0) | 2020.04.14 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
@ModelAttribute
@ModelAttirbute를 이용하면 커멘드 객체의 이름을 변경할 수 있고, 이렇게 변경된 이름은 뷰에서 커멘드 객체를 참조할 때사용된다.
MemberController.java
@RequestMapping(value = "/memRemove", method = RequestMethod.POST)
public String memRemove(@ModelAttribute("mem") Member member) {
service.memberRemove(member);
return "memRemoveOk";
}
|
cs |
memRemoveOk.jsp
ID : ${mem.memId}<br />
|
cs |
커맨드 객체 프로퍼티 데이터 타입
memJoin.html
<form action="/lec19/member/memJoin" method="post">
ID : <input type="text" name="memId" ><br />
PW : <input type="password" name="memPw" ><br />
MAIL : <input type="text" name="memMail" ><br />
PHONE1 : <input type="text" name="memPhones[0].memPhone1" size="5"> -
<input type="text" name="memPhones[0].memPhone2" size="5"> -
<input type="text" name="memPhones[0].memPhone3" size="5"><br />
PHONE2 : <input type="text" name="memPhones[1].memPhone1" size="5"> -
<input type="text" name="memPhones[1].memPhone2" size="5"> -
<input type="text" name="memPhones[1].memPhone3" size="5"><br />
<input type="submit" value="Join" >
<input type="reset" value="Cancel" >
</form>
|
cs |
Member.java
public class Member {
private String memId;
private String memPw;
private String memMail;
private List<MemPhone> memPhones;
public String getMemId() {
return memId;
}
public void setMemId(String memId) {
this.memId = memId;
}
public String getMemPw() {
return memPw;
}
public void setMemPw(String memPw) {
this.memPw = memPw;
}
public String getMemMail() {
return memMail;
}
public void setMemMail(String memMail) {
this.memMail = memMail;
}
public List<MemPhone> getMemPhones() {
return memPhones;
}
public void setMemPhones(List<MemPhone> memPhones) {
this.memPhones = memPhones;
}
}
|
cs |
Model & ModelAndView
Controller에서 View에 데이터를 전달하기 위해 사용되는 객체로 Model과 ModelAndView가 있다. Model은 뷰에 데이터만을 전달하기 위한 객체이고, ModelAndView는 데이터와 뷰의 이름을 함께 전달하는 객체이다.
@RequestMapping(value = "/memModify", method = RequestMethod.POST)
public String memModify(Model model, Member member) {
Member[] members = service.memberModify(member);
model.addAttribute("memBef", members[0]);
model.addAttribute("memAft", members[1]);
return "memModifyOk";
}
|
cs |
@RequestMapping(value = "/memModify", method = RequestMethod.POST) public ModelAndView memModify(Member member) { Member[] members = service.memberModify(member);
ModelAndView mav = new ModelAndView(); mav.addObject("memBef", members[0]); mav.addObject("memAft", members[1]);
mav.setViewName("memModifyOk");
return mav; } |
'Spring > Study' 카테고리의 다른 글
스프링(Spring) 리다이렉트(Redirect), 인터셉트(Intercept) (0) | 2020.04.18 |
---|---|
스프링(Spring) 세션(Session), 쿠키(Cookie) (0) | 2020.04.18 |
스프링(Spring) Controller 객체 구현 1 (0) | 2020.04.17 |
스프링(Spring) Service & DAO 객체 구현 (0) | 2020.04.16 |
스프링(Spring) 한글 처리 (0) | 2020.04.16 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
@RequestMapping을 이용한 URL 매핑
@RequestMapping 어노테이션은 http request로 들어오는 URL을 특정 Controller 클래스나 메소드로 연결시켜주는 역할을 한다.
@RequestMapping(value="/memJoin", method=RequestMethod.GET)과 같이 value와 method 속성을 사용할 수 있는데, method의 Default 값은 GET이므로 method를 명시하지 않으면 자동으로 GET 요청을 처리한다. method 없이 value만 사용할 경우 이름을 생략하여 @RequestMapping("memJoin")과 같이 사용 가능하다.
메소드에 @RequestMapping 적용
public class MemberController {
@Resource(name="memService")
MemberService service;
@RequestMapping(value="/member/memLogin", method=RequestMethod.POST)
public String memLogin(Model model, HttpServletRequest request) {
String memId = request.getParameter("memId");
String memPw = request.getParameter("memPw");
model.addAttribute("memId", memId);
model.addAttribute("memPw", memPw);
return "memLoginOk";
}
}
|
cs |
클래스에 @RequestMapping 적용
@RequestMapping("/member")
public class MemberController {
@Resource(name="memService")
MemberService service;
@RequestMapping(value="/memLogin", method=RequestMethod.POST)
public String memLogin(Model model, HttpServletRequest request) {
String memId = request.getParameter("memId");
String memPw = request.getParameter("memPw");
model.addAttribute("memId", memId);
model.addAttribute("memPw", memPw);
return "memLoginOk";
}
}
|
cs |
요청 파라미터
HttpServletRequest 객체를 이용한 HTTP 전송 정보 얻기
login.html
ID : <input type="text" name="memId" ><br />
PW : <input type="password" name="memPw" ><br />
|
cs |
MemberController.java
@RequestMapping("/member")
public class MemberController {
@Resource(name="memService")
MemberService service;
@RequestMapping(value="/memLogin", method=RequestMethod.POST)
public String memLogin(Model model, HttpServletRequest request) {
String memId = request.getParameter("memId");
String memPw = request.getParameter("memPw");
model.addAttribute("memId", memId);
model.addAttribute("memPw", memPw);
return "memLoginOk";
}
}
|
cs |
@RequestParam 어노테이션을 이용한 HTTP 전송 정보 얻기
login.html
ID : <input type="text" name="memId" ><br />
PW : <input type="password" name="memPw" ><br />
|
cs |
MemberController.java
@RequestMapping(value="/memLogin", method=RequestMethod.POST)
public String memLogin(Model model, @RequestParam("memId") String memId, @RequestParam("memPw") String memPw) {
Member member = service.memberSearch(memId, memPw);
model.addAttribute("memId", member.getMemId());
model.addAttribute("memPw", member.getMemPw());
return "memLoginOk";
}
|
cs |
커멘드 객체를 이용한 HTTP 전송 정보 얻기
memJoin.html
<form action="/lec18/member/memJoin" method="post">
ID : <input type="text" name="memId" ><br />
PW : <input type="password" name="memPw" ><br />
MAIL : <input type="text" name="memMail" ><br />
PHONE : <input type="text" name="memPhone.memPhone1" size="5"> -
<input type="text" name="memPhone.memPhone2" size="5"> -
<input type="text" name="memPhone.memPhone3" size="5"><br />
AGE : <input type="text" name="memAge" size="4"><br />
<input type="submit" value="Join" >
<input type="reset" value="Cancel" >
</form>
|
cs |
Member.java
public class Member {
private String memId;
private String memPw;
private String memMail;
private MemPhone memPhone;
public String getMemId() {
return memId;
}
public void setMemId(String memId) {
this.memId = memId;
}
public String getMemPw() {
return memPw;
}
public void setMemPw(String memPw) {
this.memPw = memPw;
}
public String getMemMail() {
return memMail;
}
public void setMemMail(String memMail) {
this.memMail = memMail;
}
public MemPhone getMemPhone() {
return memPhone;
}
public void setMemPhone(MemPhone memPhone) {
this.memPhone = memPhone;
}
}
|
cs |
MemberController.java
@RequestMapping(value="/memJoin", method=RequestMethod.POST)
public String memJoin(Member member) {
service.memberRegister(member);
return "memJoinOk";
}
|
cs |
memberJoinOk.jsp
ID : ${member.memId}<br /> PW : ${member.memPw}<br /> Mail : ${member.memMail} <br /> Phone : ${member.memPhone.memPhone1} - ${member.memPhone.memPhone2} - ${member.memPhone.memPhone3}<br />
|
'Spring > Study' 카테고리의 다른 글
스프링(Spring) 세션(Session), 쿠키(Cookie) (0) | 2020.04.18 |
---|---|
스프링(Spring) Controller 객체 구현 2 (0) | 2020.04.17 |
스프링(Spring) Service & DAO 객체 구현 (0) | 2020.04.16 |
스프링(Spring) 한글 처리 (0) | 2020.04.16 |
스프링(Spring) MVC 웹 서비스 (0) | 2020.04.16 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
VMware는 가상머신의 한 종류이다. 가상머신이란 하나의 PC에서 가상 PC를 통해 여러 종류의 OS (Operation System)를 사용 가능하도록 해주는 프로그램이다. 간단히 말하면, Windows 내에서도 Linux 환경을 사용할 수 있도록 해준다. 가상머신은 VMware와 VirtualBox를 주로 사용하는데, VirtualBox는 무료인 반면에, VMware는 유료라는 단점이 있다.
VirtualBox 설치 : https://devmoomini.tistory.com/86
1. VMware 공식 사이트에 접속 (https://www.vmware.com/)
2. 상단의 다운로드 - 무료 제품 평가판 및 데모 - Workstation Pro 클릭
3. 자신의 OS버전에 맞게 지금 다운로드 클릭
4. 다운받은 파일을 실행시키고, Next 클릭
5. I accept the terms in the License Agreement 체크 후 Next 클릭
6. Enhanced Keyboard Driver 체크 후, Next 클릭
7. Next 클릭
8. Next 클릭
9. Install 클릭
10. Finish를 클릭하여 설치 완료
11. 설치된 파일을 실행하고 I want to try VMware Workstation 15 for 30 days를 선택 후 Continue 클릭
12. Finish 클릭
13. VMware 정상 실행되는 것 확인
'ETC' 카테고리의 다른 글
VirtualBox 설치 (0) | 2020.04.17 |
---|---|
운영체제 버전 확인 (0) | 2020.04.16 |
Windows Git 설치 (0) | 2020.04.07 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
VirtualBox는 가상머신의 한 종류이다. 가상머신이란 하나의 PC에서 가상 PC를 통해 여러 종류의 OS (Operation System)를 사용 가능하도록 해주는 프로그램이다. 간단히 말하면, Windows 내에서도 Linux 환경을 사용할 수 있도록 해준다. 가상머신은 VMware와 VirtualBox를 주로 사용하는데, VMware는 유료인 반면에, VirtualBox는 무료로 사용할 수 있다는 장점이 있다.
VMware 설치 : https://devmoomini.tistory.com/87
1. VirtualBox 공식 사이트에 접속 (https://www.virtualbox.org/)
2. 중간에 있는 Download VirtualBox 6.1 클릭
3. 자신의 OS버전에 맞는 파일 클릭
4. 다운 받은 파일을 실행시키고, Next 클릭
5. Next 클릭 (설치경로 변경을 원한다면 Browse를 클릭하여 변경 후 Next 클릭)
6. Next 클릭
7. Yes 클릭
8. Install 클릭
9. Finish를 클릭하여 설치 완료
10. VirtualBox 정상 실행되는 것 확인
'ETC' 카테고리의 다른 글
VMware 설치 (0) | 2020.04.17 |
---|---|
운영체제 버전 확인 (0) | 2020.04.16 |
Windows Git 설치 (0) | 2020.04.07 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
문제 링크
- https://www.acmicpc.net/problem/9465
사용 알고리즘
- DP
풀이
- d[i][j] = 2 * i개의 스티커에서 얻을 수 있는 최대점수, i번째 열에서 뜯는 스티커는 j
- d[i][0] = max(d[i - 1][0], d[i - 1][1], d[i - 1][2]) (j = 0 : 위, 아래 모두 뜯지 않음)
- d[i][1] = max(d[i - 1][0], d[i - 1][2]) + p[i][0] (j = 1 : 위만 뜯음)
- d[i][2] = max(d[i - 1][0], d[i - 1][1]) + p[i][1] (j = 2 : 아래만 뜯음)
소스 코드
- https://github.com/moomini/algorithm/blob/master/boj/9465.cpp
#include <cstdio> #include <algorithm>
using namespace std;
int d[100003][3]; int arr[100003][2];
int main(void) { int t; for (scanf("%d", &t); t--;) { int n; scanf("%d", &n); for (int i = 0; i < n; ++i) scanf("%d", &arr[i][0]); for (int i = 0; i < n; ++i) scanf("%d", &arr[i][1]); d[0][1] = arr[0][0]; d[0][2] = arr[0][1]; for (int i = 1; i < n; ++i) { d[i][0] = max(d[i - 1][0], max(d[i - 1][1], d[i - 1][2])); d[i][1] = max(d[i - 1][0], d[i - 1][2]) + arr[i][0]; d[i][2] = max(d[i - 1][0], d[i - 1][1]) + arr[i][1]; } printf("%d\n", max(d[n - 1][0], max(d[n - 1][1], d[n - 1][2]))); } return 0; } |
'Algorithm > Problem Solving' 카테고리의 다른 글
[BOJ/11055] 가장 큰 증가 부분 수열 (0) | 2020.04.18 |
---|---|
[BOJ/11053] 가장 긴 증가하는 부분 수열 (0) | 2020.04.17 |
[BOJ/2156] 포도주 시식 (0) | 2020.04.17 |
[BOJ/11057] 오르막 수 (0) | 2020.04.16 |
[BOJ/10844] 쉬운 계단 수 (0) | 2020.04.14 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
문제 링크
- https://www.acmicpc.net/problem/11057
사용 알고리즘
- DP
풀이
- d[i][j] = i자리 오르막 수의 개수, i번째 자리의 수는 j
- d[1][i] = 1
- d[i][j] += d[i - 1][k] (0 <= k <= j)
소스 코드
- https://github.com/moomini/algorithm/blob/master/boj/11057.cpp
#include <cstdio>
int d[1003][10];
int main(void) { int n; scanf("%d", &n); for (int i = 0; i <= 9; ++i) d[1][i] = 1; for (int i = 2; i <= n; ++i) { for (int j = 0; j <= 9; ++j) { for (int k = 0; k <= j; ++k) { d[i][j] += d[i - 1][k]; d[i][j] %= 10007; } } } int ans = 0; for (int i = 0; i <= 9; ++i) { ans += d[n][i]; ans %= 10007; } printf("%d\n", ans); return 0; } |
'Algorithm > Problem Solving' 카테고리의 다른 글
[BOJ/11055] 가장 큰 증가 부분 수열 (0) | 2020.04.18 |
---|---|
[BOJ/11053] 가장 긴 증가하는 부분 수열 (0) | 2020.04.17 |
[BOJ/2156] 포도주 시식 (0) | 2020.04.17 |
[BOJ/9465] 스티커 (0) | 2020.04.16 |
[BOJ/10844] 쉬운 계단 수 (0) | 2020.04.14 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
Service 객체 구현
@Service, @Component @Resource, @Repository 어노테이션을 이용하여 Service 객체 생성 및 자동주입이 가능하다. 어노테이션 뒤에 괄호로 이름을 넣어주기도 하는데, 이름을 빼고도 사용할 수 있다.
MemberController.java
@Controller
public class MemberController {
@Resource(name="memService")
MemberService service;
}
|
cs |
MemberService.java
//@Service
//@Service("memService")
//@Component
//@Component("memService")
//@Repository
@Repository("memService")
public class MemberService implements IMemberService {
@Autowired
MemberDao dao;
}
|
cs |
DAO 객체 구현
Service 객체와 마찬가지로 어노테이션을 이용하여 DAO 객체 생성 및 자동주입이 가능하다.
MemberController.java
@Controller
public class MemberController {
@Resource
MemberService service;
}
|
cs |
MemberDao.java
@Repository
public class MemberDao implements IMemberDao {
private HashMap<String, Member> dbMap;
public MemberDao() {
dbMap = new HashMap<String, Member>();
}
}
|
'Spring > Study' 카테고리의 다른 글
스프링(Spring) Controller 객체 구현 2 (0) | 2020.04.17 |
---|---|
스프링(Spring) Controller 객체 구현 1 (0) | 2020.04.17 |
스프링(Spring) 한글 처리 (0) | 2020.04.16 |
스프링(Spring) MVC 웹 서비스 (0) | 2020.04.16 |
스프링(Spring) STS를 이용한 웹 프로젝트 생성 (0) | 2020.04.15 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
스프링(Spring)에서 한글의 깨짐을 방지하기 위해 UTF-8 형식으로 인코딩을 해주어야 한다. 웹 설정파일에서 <filter> 태그를 통해 인코딩이 가능하다.
web.xml
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
|
cs |
실행 결과
'Spring > Study' 카테고리의 다른 글
스프링(Spring) Controller 객체 구현 1 (0) | 2020.04.17 |
---|---|
스프링(Spring) Service & DAO 객체 구현 (0) | 2020.04.16 |
스프링(Spring) MVC 웹 서비스 (0) | 2020.04.16 |
스프링(Spring) STS를 이용한 웹 프로젝트 생성 (0) | 2020.04.15 |
스프링(Spring) 웹 프로그래밍 설계 모델 (0) | 2020.04.14 |
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
프로젝트 전체 구조
1. java : 웹 애플리케이션에서 사용되는 Controller, Service, DAO 객체들의 java 파일의 위치
2. webapp : 스프링 설정파일, JSP, HTML 등 웹과 관련된 파일의 위치
3. resources : JSP 파일을 제외한 html, css, js 파일 등의 위치
4. spring : 스프링 설정파일의 위치
5. views : JSP 파일의 위치
6. xeb.xml : 웹 설정파일
7. pom.xml : Maven 설정 파일
web.xml
웹 애플리케이션에 최초 사용자의 요청이 발생하면 가장 먼저 DispatcherServlet이 사용자의 요청을 받는데, 개발자는 DispatcherServlet을 서블릿으로 등록해주어야 한다. 모든 사용자의 요청을 받기 위해 root를 의미하는 / 로 URL을 매핑한다.
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
|
cs |
DispatcherServlet
- HandlerMapping : 적합한 Controller를 선택
- HandlerAdapter : 해당하는 Controller 내에서 가장 적합한 메소드를 선택
- ViewResolver : 가장 적합한 JSP 파일 선택
servlet-context.xml
웹 설정파일인 web.xml에 스프링 설정파일의 역할을 하는 파일로 지정되어있다. 클래스로부터 빈(Bean) 객체를 생성하고 조립하는 역할
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
|
cs |
Controller
사용자의 요청을 실체로 처리하는 부분
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
logger.info("Welcome home! The client locale is {}.", locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate );
return "home";
}
}
|
cs |
View
클라이언트 요청정보(URL 매핑 값)에 해당하는 JSP파일 실행
'Spring > Study' 카테고리의 다른 글
스프링(Spring) Service & DAO 객체 구현 (0) | 2020.04.16 |
---|---|
스프링(Spring) 한글 처리 (0) | 2020.04.16 |
스프링(Spring) STS를 이용한 웹 프로젝트 생성 (0) | 2020.04.15 |
스프링(Spring) 웹 프로그래밍 설계 모델 (0) | 2020.04.14 |
스프링(Spring) Java 파일 분리 (0) | 2020.04.13 |