문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다. 수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오. 입력 첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다. 출력 수빈이가 동생을 찾는 가장 빠른 시간을 출력한다. 반례를 생각못했다.. 처음부터 같은 위치에 있을 때(N==K)를 고려..
문제 그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다. 입력 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다. 출력 첫째 줄에 DFS를 수행한 결과를, 그 다음 줄에는 BFS를 수행한 결과를 출력한다. V부터 방문된 점을 순서대로 출력하면 된다. ..
스터디에서 대니스가 말씀해주시길, JUnit 내에 있는 Assertions보다는 AssertJ를 많이 사용한다고 말씀해주셨다. 그래서 이번엔 이 두 개의 차이점을 정리해보려고 한다. 해당 내용은 다음 링크를 번역한 내용이다. AssertJ vs JUnit 우선, 간단하게 두 개의 차이점은 다음과 같다. JUnit : 자바에 구축된 자동화 테스트가 가능한 프레임워크 AssertJ : 자바 테스트에서 유창하고 풍부한 assertions를 작성하는데 사용되는 오픈소스 라이브러리 물론, JUnit에서도 assertions가 가능하지만, AssertJ는 작업 과정을 더 효과적으로 만들고 코드를 더 잘 읽을 수 있게 만든다. 왜 AssertJ일까? 배우기 쉽다. AssertJ Docs 정리가 잘 되어 있다. ⇒ 링..
이제 앞에서 만들었던 요구사항을 만족하는 테스트 코드를 작성해보자. Inventory 만들기 가로, 세로, 높이 냉장, 냉동, 상온(타입) 총 저장 수량 현재 수량 할일목록 Inventory의 크기를 알 수 있어야 한다. Inventory의 타입을 알 수 있어야 한다. 총 저장 수량을 알 수 있어야 한다. 현재 저장된 수량을 알 수 있어야 한다. 첫 번째 InventoryTests TODO Inventory의 크기를 알 수 있어야 한다. Inventory의 타입을 알 수 있어야 한다. 총 저장 수량을 알 수 있어야 한다. DONE package com.kkoon9.inventoryTDD; import org.junit.jupiter.api.Assertions; import org.junit.jupiter..
스프링에서 제공하는 spring-boot-starter-test 디펜던시에서 JUnit과 같은 Test 라이브러리를 제공한다. plugins { id 'org.springframework.boot' version '2.7.0-M1' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.kkoon9' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() maven { url '' } } dep..
TDD란 프로그램 작성보다 테스트 코드를 먼저 작성하는 개발 방법론이다. TDD의 목표 작동하는 깔끔한 코드 TDD의 원칙 자동화된 테스트가 실패한 경우만 새로운 코드를 작성한다. ⇒ 이미 작성된 코드를 변경하지 말라는 뜻에서 있는 원칙 중복을 제거한다. ⇒ 리팩토링의 개선이 있다는 의미 실패하는 테스트를 작성하기 전엔 코드를 작성하지 않는다. 실패하는 테스트 코드를 한 번에 하나 이상 작성하지 않는다. ⇒ 하나의 코드는 하나의 상황에만 적용된다는 의미 실패하는 테스트를 통과하기에 충분한 정도를 넘어서는 코드를 작성하지 않는다. ⇒ 과하게 (x) ex) 곱하기 테스트 코드에는 곱하기 기능만 수행(제곱, 세제곱 등을 포함하지 말라) TDD 개발 방법론 flow 실패하는 테스트 코드 작성 (실패하는 테스트 ..
문제 Day Of Mourning의 기타리스트 강토는 다가오는 공연에서 연주할 N개의 곡을 연주하고 있다. 지금까지 공연과는 다른 공연을 보여주기 위해서 이번 공연에서는 매번 곡이 시작하기 전에 볼륨을 바꾸고 연주하려고 한다. 먼저, 공연이 시작하기 전에 각각의 곡이 시작하기 전에 바꿀 수 있는 볼륨의 리스트를 만들었다. 이 리스트를 V라고 했을 때, V[i]는 i번째 곡을 연주하기 전에 바꿀 수 있는 볼륨을 의미한다. 항상 리스트에 적힌 차이로만 볼륨을 바꿀 수 있다. 즉, 현재 볼륨이 P이고 지금 i번째 곡을 연주하기 전이라면, i번 곡은 P+V[i]나 P-V[i] 로 연주해야 한다. 하지만, 0보다 작은 값으로 볼륨을 바꾸거나, M보다 큰 값으로 볼륨을 바꿀 수 없다. 곡의 개수 N과 시작 볼륨 S..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/SuuGU/btrrEFPaOLA/qPG1FGENdNgi1IqhxhQx90/img.png)
문제 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. 입력 첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파벳 대문자로만 이루어져 있으며, 최대 1000글자로 이루어져 있다. 출력 첫째 줄에 입력으로 주어진 두 문자열의 LCS의 길이를 출력한다. DP[i][j] = X[0 ... i]Y[0...j의 공통 부분 수열의 최대 길이 두 문자열의 길이를 조금씩 늘려 가며 확인하여, 공통 부분 수열(LCS)의 최대 길이를 계산한다. 점화식 if X[i] == Y[j] DP[i][j] = DP[i-1][j-1] +..
- Total
- Today
- Yesterday
- JPA
- MSA
- Java
- BAEKJOON
- Spring
- Kotlin
- 정규표현식
- 알고리즘
- Olympiad
- programmers
- 디자인패턴
- 코테
- 테라폼
- AWS
- 이팩티브 자바
- 이펙티브 자바
- kotest
- 클린 아키텍처
- 객체지향
- kkoon9
- 클린 코드
- C++
- 백준
- Algorithm
- BOJ
- Spring Boot
- node.js
- 프로그래머스
- 디자인 패턴
- Effective Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |