전체 글

TIL

Todays' Dev Notes(2018-03-16)

WebSocketSession Mock 테스트 내 중복 제거 기존에는 특정 테스트 클래스 내에 테스트 상황을 모두 가정해놓고 테스트를 진행하였습니다. 그렇다보니 여러 테스트 클래스에서 동시에 사용되는 부분이 있어 중복이 발생하였습니다. 그러한 부분을 제거하고자 하였습니다. BasicAuthAcceptanceTest 라는 클래스가 있습니다. 이 클래스의 역할은 스프링 테스트 서버를 가동시키고 특정 유저를 찾아 세션값 까지 넣는 역할을 합니다. 즉, 세션값으로 수행하는 로직이 있을 때 사용하는데요. 저는 BasicAuthAcceptanceTest 을 상속받는 클래스를 하나 더 만들어서 여기엔 WebSocketSession 에 대한 테스트 데이터를 미리 만들어서 중복을 해결하려고 합니다. public abst..

TIL

Todays' Dev Notes(2018-03-15)

생성자에 @Autowired 적용 private final List methodArgumentResolvers = new ArrayList(); @Autowired private UserHandlerMethodArgumentResolver userHandlerMethodArgumentResolver; @Autowired private GameRoomHandlerMethodArgumentResolver gameRoomHandlerMethodArgumentResolver; public ParameterBinder() { methodArgumentResolvers.add(new UserHandlerMethodArgumentResolver()); methodArgumentResolvers.add(new Game..

Algorithm/problem solving

Today's Algorithm(2019-03-15)

Today's Algorithm(2019-03-15) baekjoon2293. 동전1 이제 정말 제대로 된 다이나믹 프로그래밍 문제를 만나는 것 같습니다. 다이나믹 프로그램에서는 기록을 해두고 그것을 이용하여 푸는 것이 중요한데요. 중요한건 '어떤 것을 기록하느냐'입니다. 그건 문제에 따라 다릅니다. 이 문제의 경우 '경우의 수'가 구하는 것인데요. 그럼 기록하는 것도 경우의 수를 기록해놓고 그 전에 구해놓은 경우의 수를 재활용하는 방법을 생각해야합니다. 위 그림에서 [해결전략]에 하나의 표가 보일 것인데요. 저게 기록해두는 배열입니다. 이 문제는 이런 전략으로 기록할 것입니다. d [i] [j] : i 번째까지 코인들로 j라는 수를 만들어 내는 경우의 수 ex) 위 경우 A(0) = 1 로 3을 만드는..

Algorithm/problem solving

Today's Algorithm(2019-03-14)

Today's Algorithm(2019-03-14) baekjoon11047. 동전0 이 문제는 탐욕법의 문제의 첫걸음에 해당하는 문제인데요. 정말 탐욕법스럽게만 풀면됩니다. 그럼 탐욕법이란 뭘까요? 탐욕법은 뒤까지 모두 고려하지 않고 각 단계에서 최선의 선택을 하는 방법입니다. 이 문제에서 탐욕법스럽게 푸는 방법은 잔돈에서 낼 수 있는 가장 큰 단위의 동전부터 내는 것입니다. 즉 4400원이 있다면 낼 수 있는 가장 큰 범위인 1000원 단위부터 낸다는 것입니다(1, 5, 10, 50, 100, 500, 1000, 5000 단위 가정)그럼 모든 잔돈 문제가 이렇게 단순하게 접근 가능할까요? 그건 아닙니다. 왜냐하면 동전 단위에 따라 이렇게 풀 수 없는 경우가 있기 때문입니다. 예를들어 1060원의 잔..

Algorithm/problem solving

Today's Algorithm(2019-03-13)

Today's Algorithm(2019-03-13) baekjoon2163. 초콜릿 나누기 다이나믹 프로그래밍을 연습하려고 이 문제를 뽑았지만 수학 문제에 더 가까운 것 같습니다. 생각할 부분도 딱히 없어서 가볍게 정리하고 넘어가겠습니다. N * M길이의 초콜릿을 효율적으로 나누기 위해선 한번 금을 가를 때 최대한 길게 나누는게 좋겠죠? 가로로 나눈다고 생각해봅시다(세로 나누어도 결과는 같습니다). 그렇다면 가로가 N이라면 M - 1 번 나눌 수 있을 것입니다. 그렇다면 이젠 각 줄 안을 다 잘라야 합니다. 그 개수는 M - 1 줄에 N개씩 있으니 (M - 1) * N 이구요. 결과적으로 (M - 1) * N(M - 1) = NM - 1이 됩니다. 세로를 먼저 나눈다고 하더라도 NM - 1로 계산하는 ..

Algorithm/problem solving

Today's Algorithm(2019-03-12)

Today's Algorithm(2019-03-12) baekjoon11399. ATM 탐욕법에 대한 연습으로 뽑은 문제인데요. 사실 이 문제가 어떤 점에서 탐욕법인지 잘 모르겠습니다. 우선 문제를 풀 때 어떻게 하면 각 사람이 걸리는 시간을 최대한으로 줄일 것인가를 살펴봐야 하는데요. 그건 정렬에 있습니다. 만약 [1, 5, 3, 2, 4] 가 주어진다고 했을 때 3, 2, 4 걸리는 사람은 5를 다 더해주는 시간만큼 기다려야 합니다. 하지만 정렬이 되어 [1 2, 3, 4, 5]라면 큰 수를 더해주는 것을 피할 수 있겠죠. 결국 핵심은 빨리 끝날 사람은 먼저 끝내줘야 전체 기다리는 시간이 줄어든다는 것입니다. public class Main { public static void main(String[..

Brad Lee
Brad's blog