전체 글 75

[백준] 11399번 ATM

문제 인하은행에는 ATM이 1대밖에 없다. 지금 이 ATM앞에 N명의 사람들이 줄을 서있다. 사람은 1번부터 N번까지 번호가 매겨져 있으며, i번 사람이 돈을 인출하는데 걸리는 시간은 Pi분이다. 사람들이 줄을 서는 순서에 따라서, 돈을 인출하는데 필요한 시간의 합이 달라지게 된다. 예를 들어, 총 5명이 있고, P1 = 3, P2 = 1, P3 = 4, P4 = 3, P5 = 2 인 경우를 생각해보자. [1, 2, 3, 4, 5] 순서로 줄을 선다면, 1번 사람은 3분만에 돈을 뽑을 수 있다. 2번 사람은 1번 사람이 돈을 뽑을 때 까지 기다려야 하기 때문에, 3+1 = 4분이 걸리게 된다. 3번 사람은 1번, 2번 사람이 돈을 뽑을 때까지 기다려야 하기 때문에, 총 3+1+4 = 8분이 필요하게 된다..

공부/알고리즘 2020.11.26

1일 1커밋 6개월간 하면 생기는 일

아무 일도 생기지 않는다. (유튜브식 어그로용 제목으로 조회수를 늘려보고자 하였습니다. 죄송합니다..) 발단 회사에서 매너리즘에 빠져있었을 때 우연히 이동욱님(github.com/jojoldu)의 인터뷰를 보게 되었고 1일 1커밋이라는 것을 알게 되었다. 이동욱님의 깃허브에 잔디를 보고 내 아스팔트에도 잔디를 심고 싶어서 그 날 바로 심기 시작하였다. 전개 처음에는 인프런 강의 보고 따라 하면서, 그 뒤에는 진행하고 싶은 프로젝트가 생겨서, 이후에는 알고리즘 문제를 풀면서, 또다시 새로운 프로젝트를 하면서 잔디를 심어 나갔다. 위기 2박 3일 여행을 가게 되었다. 1박 2일 여행은 몇 번 다녀왔지만 토요일 새벽에 심고 일요일 저녁에 심으면 문제가 없었지만, 금토일 여행은 대책이 필요했다. 자동으로 잔디 ..

일상/개발 2020.11.25

[백준] 1931번 회의실배정

문제 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다. 입력 첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다 작거..

공부/알고리즘 2020.11.24

[백준] 11047번 동전 0

문제 준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다. 동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) 출력 첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다. 풀이 동전을 어떻게 사용하여도 나누어 떨어지기 때문에 그리디 알고리즘을 사용하여 풀 수 있다. 그리디 알고리즘은 매 순간 최선의 선택을 하는 것을 말한다. (마치 매..

공부/알고리즘 2020.11.23

[백준] 2798번 블랙잭

문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 있다. 한국 최고의 블랙잭 고수 김정인은 새로운 블랙잭 규칙을 만들어 상근, 창영이와 게임하려고 한다. 김정인 버전의 블랙잭에서 각 카드에는 양의 정수가 쓰여 있다. 그 다음, 딜러는 N장의 카드를 모두 숫자가 보이도록 바닥에 놓는다. 그런 후에 딜러는 숫자 M을 크게 외친다. 이제 플레이어는 제한된 시간 안에 N장의 카드 중에서 3장의 카드를 골라야 한다. 블랙잭 변형 게임이기 때문에, 플레이어가 고른 카드의 합은 M을 넘지 않으면서 M과 최대한 가깝게 만들어야 한다. N장의 카드에 써져 있는 숫자가 주어졌을 때, ..

공부/알고리즘 2020.11.22

Spring Data Rest 알아보기

개요 hateoas에 대해 관심을 갖고 찾던 중 spring-data-rest와 spring-data-jpa로 간단하게 crud가 가능하다는 것을 알게 되었다. (hateoas도 적용된다) 그래서 어떤것인지 확인해 보기 위해 간단하게 살펴 보았고 그 내용을 공유한다. 레이어가 간단하다. controller와 service 레이어가 없다. entity와 repository만으로 rest api가 생성된다.! 이 두개만 있으면 끝이다. 소스도 간단하다 package com.byeongukchoi.springdatarestexample.domain; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import o..

공부/Spring 2020.11.20

옵셔널(optional)과 람다(lambda)를 이용하여 JpaRepository에서 예외 처리하기

spring에서 JpaRepository의 findById를 이용하면 Optional 타입으로 반환이 된다. 처음에는 불편하기만 하였으나 이제 많이 편해져서 혹시라도 아직 불편하게 사용하는 사람들을 위해서 그 방법을 공유한다. 아래 4가지의 코드는 같은 로직을 가독성이 좋게 코드를 조금씩 수정한 것이다. 가나다 많이 이상하고 불편했던 경우 Optional optinalUser = userRepository.findById(id); // check for null if(optinalUser.isPresent()) { User user = optinalUser.get(); } else { throw new ResourceNotFoundException(); } 옵셔널 타입이 아닌 일반 객체로 받았을 경우 U..

공부/Spring 2020.11.17

[백준] 10870번 피보나치 수 5

문제 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다. n=17일때 까지 피보나치 수를 써보면 다음과 같다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597 n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 n이 주어진다. n은 20보다 작거나 같은 자연수 또는 0이다. 출력 첫째 줄에 n번째 피보나치 수를 출력한다. 풀이 n이 최대 20으로 크지 않기 때문에 재귀를 이용해서 풀 수 있다. 재귀함수의 매개변수 ..

공부/알고리즘 2020.11.14

Just SNS 4일 간의 개발 회고

개요 4일 휴가가 생기다 회사 이직을 하게 되면서 4일의 휴가가 생겼다. 그동안 이직할 회사에서 사용할 spring도 학습할 겸 평소에 만들어 보고 싶었던 프로젝트도 만들어 볼 겸 심심함도 해소할 겸 간단한 게시판을 만들어 보기로 하였다. 이름은 just sns.. 깃허브 소스 github.com/ByeongUkChoi/justSNS ByeongUkChoi/justSNS 그냥 게시판. Contribute to ByeongUkChoi/justSNS development by creating an account on GitHub. github.com 4일간의 과정을 스트리밍한 유튜브 동영상 www.youtube.com/watch?v=zCeqT8jvxLc&list=PLkgj-h1OBMYo7kP6fpMCxt6S..

프로젝트 2020.11.13

[백준] 10872번 팩토리얼

문제 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 정수 N(0 ≤ N ≤ 12)가 주어진다. 출력 첫째 줄에 N!을 출력한다. 풀이 재귀 함수를 사용한다. 재귀 함수에 매개변수로 n을 넘기고 다음번에는 n-1을 넘긴다. n이 0이되면 재귀를 종료한다. 소스코드 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); System.out.println(factorial(n)); } public static int factorial..

공부/알고리즘 2020.10.31
728x90
반응형