전체 글 63

[SWEA] 1859. 백만 장자 프로젝트 D2 Java

문제https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5LrsUaDxcDFAXc&categoryId=AV5LrsUaDxcDFAXc&categoryType=CODE&problemTitle=&orderBy=RECOMMEND_COUNT&selectCodeLang=JAVA&select-1=2&pageSize=10&pageIndex=1 SW Expert AcademySW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!swexpertacademy.com 문제 이해하기예시를 보면서 문제를 이해해보자. 세 번째 테스트 케이스를 보면 1 1 3 1 2 (buy buy sell) (b..

Algorithm 2023.10.27

[Operating System] 운영체제를 알아야 하는 이유

운영체제 커널 영역에 적재되는 프로그램 컴퓨터 부품들을 관리하고 프로그램을 작동시키는 프로그램. 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는다. e.g. Windows, macOS, Linux, andriod, iOS 운영체제란 무엇일까? 시스템 자원 프로그램 실행에 마땅히 필요한 요소들 e.g. CPU, 메모리, 보조기억장치, 입출력장치 c.f. 계산 프로그램은 CPU라는 하드웨어를, 이미지 저장 프로그램은 하드 디스크라는 하드웨어를 필요로 한다. 커널 영역(kernel space) 운영체제는 프로그램이기 때문에 메모리에 적재되어야 한다. 운영체제는 항상 컴퓨터가 부팅될 때 메모리내 커널 영역에 따로 적재되어 실행된다. c.f. 커널 영역을 제외한 나머지 영역, 사용자..

CS 2023.10.25

[Spring Boot] Lombok

Intro Spring Boot를 사용하면서 Lombok을 너무나 당연하게 써왔다. JPA의 필수 도구인 Lombok에 대한 강의를 들으면서 Annotation의 의미, 활용법과 어떤 원리로 쓰이는지 잘 이해할 수 있었다. Lombok JPA의 필수 도구. 여러 개의 field 변수를 가지고 캡슐화 원칙에 의해 Getter, Setter를 많이 만들어야 하는 JPA의 특성상, 꼭 필요한 라이브러리이다. c.f. JPA와는 별개의 라이브러리이다. JPA에서의 Entity 기본 구조 field 변수와 Getter, Setter의 조합으로 만들어진다. Lombok Annotation이 원래는 어떤 형태일까? domain package를 만들고 하위에 User 클래스를 만들었다. Lombok, Delombok은..

Java 2023.10.24

[Spring Boot] ORM, JPA, Hibernate 개념

ORM Object Relational Mapping : 객체와 데이터베이스 사이의 관계를 연결해주는 것. - 우리가 정의한 객체를 데이터에 연결해서 사용할 수 있다. - 만약, ORM 없이 직접 data를 핸들링한다면, select query 후 일일히 어떤 정보인지 mapping해서 사용해야 할 것이다. JPA Java Persistence API : 현재 Java 진영의 ORM 표준으로 채택됨. Persistence 영역 즉, data에 접근하기 위한 API의 규격을 정의해놓은 것이다. ORM vs. JPA ORM : 전체적인 개념 JPA : 구체적으로 그 기능을 정의해놓은 스펙 Hibernate JPA에 대한 실제 구현체. 즉, implementation이다. c.f. 또 다른 구현체로는 Ecli..

Java 2023.10.23

[Spring Boot] springfox 3.0.0 Whitelabel 에러

프로젝트의 버전 정보 plugins { id 'java' id 'org.springframework.boot' version '3.1.4' id 'io.spring.dependency-management' version '1.1.3' } group = 'com.example' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } 현재 프로젝트에서 spring boot 3.1.4 버전, Java 17 버전을 사용 중이다. 맞지 않았던 버전(springfox-boot-starter >> 3.0.0) // https://mvnrepository.com/artifact/io.springfox/springfox-boot-starter implementat..

Java 2023.10.20

[Spring Boot] Swagger 사용하기

1. Google에서 Maven Repository를 검색한다. https://mvnrepository.com/ 2. 이 사이트에서 springfox를 검색한다. 3. 3.0.0 버튼을 클릭한다. 4. Gradle에서 해당 내용을 복사한다. // https://mvnrepository.com/artifact/io.springfox/springfox-boot-starter implementation group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0' 5. build.gradle에 붙여넣는다. 6. 코끼리를 눌러 새로고침해준다. 7. main을 실행해본다. http://localhost:8080/swagger-ui/ 8. 크롬에서 ..

Java 2023.10.18

[Spring Boot] 테스트 시 null 값이 들어올 때 간단하게 확인하기

Test 실행 시 값이 안 들어와서 확인해봐야 할 때, Postman으로 번거롭게 확인하는 대신 콘솔에서 찍어볼 수 있다. 1. Component에서 var responseType = new ParameterizedTypeReference(){}; // var responseType = new ParameterizedTypeReference(){}; response의 type을 SearchLocalRes에서 String으로 변경해준다. 2. return 부분을 null로 잠시 바꿔준다. return null; // return responseEntity.getBody(); 해당 라인에 break point를 걸어준다. 3. Test로 가서 debug를 한다. 나의 경우에는, category는 들어왔는데 ..

Java 2023.10.17

[Programmers] 동적 계획법 > 정수 삼각형 (Java)

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/43105 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 요약 삼각형의 위에서 밑으로 한 칸씩 내려가면서 숫자를 더한다. triangle의 길이만큼 반복한다. 합한 값이 가장 큰 걸 구한다. 구현 착안 한 칸씩 내려가면서 숫자를 더하므로 내려갈 때 선택에 따라 값이 변경된다. 이 말은 즉, 이전까지의 값이 모두 같기 때문에 중복 연산을 피하려면 동적 계획법으로 풀 수 있다. 구현 방식 밑으로 내려가는 방법에는 세 가지가 있다. 내려가면서..

Algorithm 2023.10.13

동적 계획법(dynamic programming)

동적 계획법 복잡한 문제를 여러 개의 간단한 문제로 분리하여 부분의 문제들을 해결함으로써 최종적으로 복잡한 문제의 답을 구하는 방법 원리 1. 큰 문제를 작은 문제로 나눌 수 있어야 한다. 2. 작은 문제들이 반복돼 나타나고 사용되며 이 작은 문제들의 결괏값은 항상 같아야 한다. 3. 모든 작은 문제들은 한 번만 계산해 DP 테이블에 저장하며 추후 재사용할 때는 이 DP 테이블을 이용한다. 이를 memoization 기법이라고 한다. 4. 동적 계획법은 top-down 방식과 bottom-up 방식으로 구현할 수 있다. 피보나치 수열 공식 D[N] = D[N-1] + D[N-2] // N번째 수열 = N-1번째 수열 + N-2번째 수열 구현 방식 1. 동적 계획법으로 풀 수 있는지 확인하기 2. 점화식 ..

Algorithm 2023.10.13