//////
Search
📓

11/7 회고록

생성일
2022/11/07 06:47
태그

김기헌

Programmers

하샤드 수
public boolean solution(int x) { int tmp = x, sum = 0; while (0 < x) { sum += x % 10; x /= 10; } //각각의 자리수 합 구하기 if (tmp % sum == 0)return true; else return false; }
Java
복사
나누어 떨어지는 숫자 배열
//List 사용 public int[] solution(int[] arr, int divisor) { ArrayList<Integer> tmp = new ArrayList(); for (int i = 0; i < arr.length; i++) { if (arr[i] % divisor == 0) tmp.add(arr[i]); } if (tmp.size() == 0) return new int[]{-1}; Collections.sort(tmp); int[] answer = new int[tmp.size()]; for (int i = 0; i < tmp.size(); i++) answer[i] = tmp.get(i); return answer; }
Java
복사
//Heap (우선순위 큐) 사용 public int[] solution(int[] arr, int divisor) { PriorityQueue<Integer> pq = new PriorityQueue<>(); for (int i = 0; i < arr.length; i++) { if (arr[i] % divisor == 0) pq.add(arr[i]); } if (pq.size() == 0) return new int[]{-1}; int[] answer = new int[pq.size()]; int pqSize = pq.size(); for (int i = 0; i < pqSize; i++) answer[i] = pq.poll(); return answer; } //Priority_Queue를 사용하여 따로 정렬해줄 필요가 없다
Java
복사

김상호

임학준

알고리즘

코드(List 사용)
코드(PriorityQueue 사용)

이번주 최종목표 - 게시판을 만들어 docker로 띄우기

springboot-mustache-bbs 만들기
bootstrap 적용
JPA 적용

조국현

최아영

알고리즘 실습

[프로그래머스] 하샤드 수
문제 설명
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
제한 조건
x는 1 이상, 10000 이하인 정수입니다.
문제 풀이
class Solution { public boolean solution(int x) { int sum = 0; int num = x; // 숫자의 자리수를 더한다. while (x > 0) { sum += x % 10; x /= 10; } // 숫자를 더한 수로 나누어 떨어지면 참을 아니면 거짓을 반환한다. return num % sum == 0; } }
Java
복사
문제 설명
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
제한사항
arr은 자연수를 담은 배열입니다.
정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
divisor는 자연수입니다.
array는 길이 1 이상인 배열입니다.
문제 풀이
ArrayList를 활용한 풀이
import java.util.ArrayList; import java.util.Arrays; import java.util.List; class Solution { public int[] solution(int[] arr, int divisor) { List<Integer> list = new ArrayList<>(); // 나누어 떨어지면 리스트에 추가한다. for (int i = 0; i < arr.length; i++) { if (arr[i] % divisor == 0) list.add(arr[i]); } // 리스트가 비었으면 -1을 반환한다. if(list.size() == 0) return new int[]{-1}; // list를 Array로 바꾼다 int[] answer = new int[list.size()]; for (int i = 0; i < list.size(); i++) { answer[i] = list.get(i); } // 정렬하여 반환한다. Arrays.sort(answer); return answer; } }
Java
복사
우선순위 큐를 활용한 풀이
import java.util.PriorityQueue; class Solution { public int[] solution(int[] arr, int divisor) { PriorityQueue<Integer> list = new PriorityQueue<>(); for (int i=0; i<arr.length; i++) { if (arr[i] % divisor ==0) { list.add(arr[i]); } } if (list.size() == 0) return new int[]{-1}; int[] answer = new int[list.size()]; int idx = 0; while(!list.isEmpty()) { answer[idx++] = list.poll(); } return answer; } }
Java
복사

Spring Boot MVC

dependencies
Lombok
Spring Configuration Processor
Spring Web
Mustache
MySQL Driver
JPA 나중에 추가
화면에 출력하기
<MustacheController>
@GetMapping(value = "/hi") public String mustacheCon1(Model model) { model.addAttribute("username", "hi"); // view에 값을 넘김 return "greetings"; // greetings라는 이름의 view를 반환 }
Java
복사
<greetings.mustache>
<div> <h1>{{username}} hello! <h1> </div>
HTML
복사
id 입력받아 출력하기
<MustacheController>
@GetMapping(value = "/hi/{id}") public String mustacheCon2(@PathVariable String id, Model model) { model.addAttribute("username", "hi"); model.addAttribute("id", id); return "greetings"; }
Java
복사
<greetings.mustache>
<div> <h1>{{id}} {{username}} hello! <h1> </div>
HTML
복사
문제점
mustache 파일에 id를 추가하고 http://localhost:8080/hi로 접근했을 때 오류가 발생한다.
한글이 깨진다.
접근 오류 해결
<greetings.mustache>
<div> {{# id}} <h1>{{id}} {{username}} hello! <h1> {{/ id}} {{^ id}} <h1>{{username}} hello! <h1> {{/ id}} </div>
HTML
복사
한글 깨짐 해결
<application.yml>
server: sevlet: encoding: force-response: true
YAML
복사
[적용 전]
[적용 후]
header와 footer
header와 footer를 추가하고 분리해 적용시킨다.
Bootstrap을 사용해 header에 NavBar를 추가했다.
<header.mustache>
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Sping Boot Mustache</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous"> <body> <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js" integrity="sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.min.js" integrity="sha384-IDwe1+LCz02ROU9k972gdyvl+AESN10+x7tBKgc9I5HFtuNz0wWnPclzo6p9vxnk" crossorigin="anonymous"></script> <nav class="navbar navbar-expand-lg bg-light"> <div class="container-fluid"> <a class="navbar-brand" href="#">Navbar</a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav me-auto mb-2 mb-lg-0"> <li class="nav-item"> <a class="nav-link active" aria-current="page" href="#">Home</a> </li> <li class="nav-item"> <a class="nav-link" href="#">Link</a> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"> Dropdown </a> <ul class="dropdown-menu"> <li><a class="dropdown-item" href="#">Action</a></li> <li><a class="dropdown-item" href="#">Another action</a></li> <li><hr class="dropdown-divider"></li> <li><a class="dropdown-item" href="#">Something else here</a></li> </ul> </li> <li class="nav-item"> <a class="nav-link disabled">Disabled</a> </li> </ul> <form class="d-flex" role="search"> <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search"> <button class="btn btn-outline-success" type="submit">Search</button> </form> </div> </div> </nav> </body> </html>
HTML
복사
<footer.mustache>
<div class="mb-5 container-fluid"> <hr> <p>@ RokBoard <a href="">Privacy</a> <a href="#">Terms</a></p> </div>
HTML
복사
<greetings.mustache>
{{>layouts/header}} <div> {{# id}} <h1>{{id}} {{username}} hello! <h1> {{/ id}} {{^ id}} <h1>{{username}} hello! <h1> {{/ id}} </div> {{>layouts/footer}}
HTML
복사
폼 데이터 주고 받기
<ArticleController>
@Controller @RequestMapping("/articles") @Slf4j public class ArticleController { @GetMapping(value = "new") public String newArticleForm() { return "articles/new"; } @PostMapping(value = "posts") public String createArticle(ArticleDto form) { log.info(form.toString()); // 로그 남기기 return ""; } }
Java
복사
<new.mustache>
{{>layouts/header}} <form action="/articles/posts" method="post"> <input type="text" name="title"> <input type="text" name="content"> <button type="submit" class="btn btn-primary">Submit</button> <a href="/articles">back</a> </form> {{>layouts/footer}}
HTML
복사

JPA 사용

JPA dependency 추가
<build.gradle>
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
XML
복사
DB접속 정보 및 JPA 정보 추가
<application.yml>
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:8080/likelion-db username: root password: 123456 jpa: show-sql: true database-platform: org.hibernate.dialect.MySQL8Dialect database : mysql hibernate.ddl-auto : update ❗초보자일 때 create 사용 금지
YAML
복사
Entity 선언
<Article>
@Entity @NoArgsConstructor @Getter public class Article { @Id @GeneratedValue private Long id; private String title; private String contents; public Article(String title, String contents) { this.title = title; this.contents = contents; } }
Java
복사
<ArticleDto>
@Getter @ToString public class ArticleDto { private Long id; private String title; private String content; public ArticleDto(Long id, String title, String content) { this.id = id; this.title = title; this.content = content; } public Article toEntity() { return new Article(title, content); } }
Java
복사
Repository 추가
<ArticleRepository.interface>
public interface ArticleRepository extends JpaRepository<Article, Long> { }
Java
복사
<ArticleController>
@Controller @RequestMapping("/articles") @Slf4j public class ArticleController { private final ArticleRepository articleRepository; public ArticleController(ArticleRepository articleRepository) { this.articleRepository = articleRepository; } @GetMapping(value = "new") public String newArticleForm() { return "articles/new"; } @PostMapping(value = "posts") public String createArticle(ArticleDto form) { log.info(form.toString()); // 로그 남기기 Article article = form.toEntity(); articleRepository.save(article); return ""; } }
Java
복사
결과 화면
페이지에서 입력한 값이 DB로 잘 들어갔다.