김기헌
Algorithm
•
Selection Sort(선택 정렬)
public class SelectionSort {
public static void main(String[] args) {
int[] arr = {1, 7, 36, 3, 38, 22, 14, 27};
int min, minIdx = 0;
for (int i = 0; i < arr.length; i++) {
min = (int) 2e9;
for (int j = i; j < arr.length; j++) {
if (arr[j] < min) {
min = arr[j];
minIdx = j;
}
}
int tmp = arr[i];
arr[i] = arr[minIdx];
arr[minIdx] = tmp;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
Java
복사
•
Codeup 2083 _ 이분탐색
public class _2083 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n, key;
n=sc.nextInt();
key=sc.nextInt();
int[] numbers = new int[n];
for(int i=0;i<n;i++){
numbers[i]=sc.nextInt();
}
int left = 0, right = numbers.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (numbers[mid] == key) {
System.out.println(mid + 1);
return;
} else if (numbers[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
System.out.println(-1);
}
}
Java
복사
SpringBoot MVC
•
게시글 수정(Get, Post)
@GetMapping(value = "/{id}/edit")
public String edit(@PathVariable Long id, Model model) {
Optional<Article> optionalArticle = articleRepository.findById(id);
if (optionalArticle.isEmpty()) {
model.addAttribute("message", String.format("%d가 없습니다.", id));
return "articles/error";
}
model.addAttribute("article", optionalArticle.get());
return "articles/edit";
}
@PostMapping("/{id}/update")
public String update(@PathVariable Long id, ArticleDTO articleDto, Model model) {
Article article = articleRepository.save(articleDto.toEntity());
model.addAttribute("article", article);
return String.format("redirect:/articles/%d", article.getId());
}
Java
복사
{{#article}}
<form action="/articles/{{id}}/update" method="post">
<input type="hidden" name="id" value="{{id}}"/>
<input type="text" name="title" value="{{title}}"/>
<textarea rows="3" name="content" >{{content}}</textarea>
<input type="submit"/>
</form>
<a href="/articles/{{id}}">1개 조회 페이지</a>
<a href="/articles">목록</a>
{{/article}}
HTML
복사
만났던 오류
•
게시글 리스트
@GetMapping("/list")
public String list(Model model) {
List<Article> articles = articleRepository.findAll();
model.addAttribute("articles", articles);
return "articles/list";
}
Java
복사
<table class="table">
<thead>
<tr>
<th scope="col">Id</th>
<th scope="col">Title</th>
<th scope="col">Contents</th>
</tr>
</thead>
<tbody class="table-group-divider">
{{#articles}}
<tr>
<th>{{Id}}</th>
<td><a href="/articles/{{id}}"{{id}}">{{title}}</a></td>
<td>{{content}}</td>
</tr>
{{/articles}}
</tbody>
</table>
<a href="/articles/new"><button type="button" class="btn btn-danger">new article</button></a>
<a href="/articles/list"><button type="button" class="btn btn-secondary">article List</button></a>
{{>layouts/footer}}
HTML
복사
이가현
임학준
EDIT 기능 추가
1 show page 추가
{{>layouts/header}}
<div class="card" style="width: 18rem;">
{{#article}}
<div class="card-body">
<h5 class="card-title">{{title}}</h5>
<h6 class="card-subtitle mb-2 text-muted">{{id}}</h6>
<p class="card-text">{{content}}</p>
<a href="/articles/new" class="card-link">new article</a>
<a href="/articles" class="card-link">list article</a>
</div>
</div>
<a href="/articles/{{id}}edit" class="btn btn-danger">Edit</a>
{{/article}}
{{>layouts/footer}}
Java
복사
•
edit 버튼을 추가해준다
2 edit.mustache 작성
{{#article}}
<form action="/articles/{{id}}/update" method="post">
<input type="hidden" name="id" value="{{id}}">
<input type="text" name="title" value="{{title}}" />
<textarea rows="3" name="content">{{content}}</textarea>
<input type="submit"/>
</form>
<a href="/articles/{{id}}">1개 조회 페이지</a>
<a href="/articles">목록</a>
{{/article}}
Java
복사
•
수정을 위한 edit 작성
3 Controller edit 작성
@GetMapping("/{id}edit")
public String edit(@PathVariable Long id, Model model) {
Optional<Article> optionalArticle = articleRepository.findById(id);
if (!optionalArticle.isEmpty()) {
model.addAttribute("article", optionalArticle.get());
return "edit";
} else {
model.addAttribute("message", String.format("%d가 없습니다.", id));
return "error";
}
}
Java
복사
•
model.addAttribute로 id를 넘겨받고 return “edit”으로 작성해놓은 edit.mustache로 이동한다
UPDATE 기능 추가
4 ArticleController @PostMapping(update) 작성
@PostMapping("/{id}/update")//PutMapping를 사용할수 없음
public String update(@PathVariable Long id, ArticleDto articleDto,Model model) {
log.info("title:{} content{}", articleDto.getTitle(), articleDto.getContent());
Article article = articleRepository.save(articleDto.toEntity());
model.addAttribute("article", article);
return String.format("redirect:/articles/%d",article.getId());
}
Java
복사
•
PutMapping를 사용하려했으나 html method가 put를 지원하지 않는다
•
<form action="/articles/{{id}}/update" method="post">//method=”put” 불가능
•
save()를 할 때 id가 있다면 insert대신 update가 실행 된다
5 Articledto, Article 수정
@Getter
@AllArgsConstructor
public class ArticleDto {
private Long id;
private String title;
private String content;
public Article toEntity() {
return new Article(this.id,this.title,this.content);//this.id추가
}
}
Java
복사
•
@PostMapping에서 id를 받아 toEntity메소드를 실행했으므로 ArticleDto클래스의 toEntity메소드에 this.id를 추가해준다
•
@AllArgsConstructor을 사용했으므로 생성자를 삭제
@Entity
@Table(name = "article2")
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class Article {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)//db에 아이디생성을 맡기겠다
private Long id;
private String title;
private String content;
}
Java
복사
•
Article도 마찬가지로 @AllArgsConstructor를 추가하고 생성자를 삭제
DELETE 기능 추가
6 show.mustache에 Delete 버튼 추가
<a href="/articles/{{id}}/delete" class="btn btn-danger">Delete</a>
Java
복사
7 ArticleController에 @GetMapping(delete) 작성
@GetMapping("/{id}/delete")
public String delete(@PathVariable Long id) {
articleRepository.deleteById(id);
return "redirect:/articles";
}
Java
복사
도전과제 (삭제시 메세지추가)
8 list.mustache에 message 추가
{{>layouts/header}}
{{#message}}
<div class = "alert alert-primary" role="alert">
{{message}}
</div>
{{/message}}
....
....
Java
복사
9 ArticleController에 @GetMapping(delete) 수정
@GetMapping("/{id}/delete")
public String delete(@PathVariable Long id,Model model) {
articleRepository.deleteById(id);
model.addAttribute("message", String.format("id:%d 가 지워졌습니다",id));
model.addAttribute("articles",articleRepository.findAll());
return "list";
}
Java
복사
완성모습
최아영
알고리즘 실습
선택 정렬
순서
오름차순 정렬
public class SelectionSort {
public int[] sort(int arr[]) {
for (int i = 0; i < arr.length; i ++) {
int minIdx = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[minIdx] < arr[i]) {
minIdx = j;
}
}
int temp = arr[i];
arr[i] = arr[minIdx];
arr[minIdx] = temp;
}
return arr;
}
}
Java
복사
내림차순 정렬
public class SelectionSort {
public int[] sort(int arr[]) {
for (int i = 0; i < arr.length; i ++) {
int maxIdx = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[maxIdx] < arr[j]) {
maxIdx = j;
}
}
int temp = arr[i];
arr[i] = arr[maxIdx];
arr[maxIdx] = temp;
}
return arr;
}
}
Java
복사
인터페이스 적용
interface StatementStrategy {
boolean apply(int a, int b);
}
public class SelectionSort {
public int[] sort(int arr[], StatementStrategy stmt) {
for (int i = 0; i < arr.length; i ++) {
int minIdx = i;
for (int j = i + 1; j < arr.length; j++) {
if (stmt.apply(arr[minIdx], arr[j])) {
minIdx = j;
}
}
int temp = arr[i];
arr[i] = arr[minIdx];
arr[minIdx] = temp;
}
return arr;
}
}
Java
복사
<SelectionSortTest>
@Test
void sort() {
int[] arr = {2, 7, 4, 9, 10, 223, 111, 23, 3, 39};
SelectionSort selectionSort = new SelectionSort();
// 오름차순 정렬
selectionSort.sort(arr, (a, b) -> a > b);
Assertions.assertEquals(2, arr[0]);
Assertions.assertEquals(3, arr[1]);
Assertions.assertEquals(4, arr[2]);
// 내림차순 정렬
selectionSort.sort(arr, (a, b) -> a < b);
Assertions.assertEquals(223, arr[0]);
Assertions.assertEquals(111, arr[1]);
Assertions.assertEquals(39, arr[2]);
}
Java
복사
Function
Function<T, R>
•
T는 입력 받는 타입, R은 리턴 타입
Function<Integer[], Boolean> fn = (arr1) -> arr1[0] > arr1[1];
System.out.println(fn.apply(new Integer[]{10, 20}));
Java
복사
BiFunction
BiFunction<Integer, Integer, Boolean> biFunction = (a, b) -> a > b;
Java
복사
Spring Boot MVC
수정 기능
Edit
•
domain에 @AllArgsConstructor를 추가한다.
•
수정 버튼을 추가한다.
<ArticleController.java>
@GetMapping("/{id}/edit")
public String edit(@PathVariable Long id, Model model) {
Optional<Article> optionalArticle = articleRepository.findById(id);
if (!optionalArticle.isEmpty()) {
model.addAttribute("article", optionalArticle.get());
return "articles/edit";
} else {
model.addAttribute("message", String.format("%d가 없습니다.", id));
return "articles/error";
}
}
Java
복사
<edit.mustache>
{{>layouts/header}}
{{#article}}
<form class="container" action="/articles/{{id}}/update" method="post">
<div class="mb-3">
<label class="form-label">제목</label>
<input type="text" class="form-control" name="title" value="{{title}}">
</div>
<div class="mb-3">
<label class="form-label">내용</label>
<textarea class="form-control" rows="3" name="content">{{content}}</textarea>
</div>
<button type="submit" class="btn btn-outline-success">수정</button>
<a href="/articles/{{id}}" class="btn btn-outline-primary">돌아가기</a>
<a href="/articles" class="btn btn-outline-primary">목록</a>
</form>
{{/article}}
{{>layouts/footer}}
HTML
복사
Update
<ArticleController.java>
@PostMapping("{id}/update")
public String update(@PathVariable Long id, ArticleDto articleDto, Model model) {
log.info("title:{} content:{}", articleDto.getTitle(), articleDto.getContent());
Article article = articleRepository.save(articleDto.toEntity());
model.addAttribute("article", article);
return String.format("redirect:/articles/%d", article.getId());
}
Java
복사
삭제 기능
Delete
•
삭제 버튼을 추가한다.
<ArticleController.java>
@PostMapping("{id}/update")
public String update(@PathVariable Long id, ArticleDto articleDto, Model model) {
log.info("title:{} content:{}", articleDto.getTitle(), articleDto.getContent());
Article article = articleRepository.save(articleDto.toEntity());
model.addAttribute("article", article);
return String.format("redirect:/articles/%d", article.getId());
}
Java
복사