//////
Search
📓

11/9 회고록

생성일
2022/11/09 07:04
태그

김기헌

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
복사