분류 전체보기222 [Kotlin] 백준 27960 : 사격 내기 문제 링크 27960번: 사격 내기 A, B, C는 올해에도 예비군 훈련을 받으러 간다. 이번 예비군 훈련 과정 중에는 영점 사격이 있으며, 10개의 과녁 각각에 점수를 매겨 맞춘 과녁 점수의 총합을 측정한다. 과녁을 맞혔을 때, 과녁별 www.acmicpc.net 문제 해설 과녁별 점수가 \(2^n\)의 형태이고 각 과녁은 사람별로 최대 한 번만 맞힐 수 있다는 점에 주목하면 된다. 즉, A와 B의 점수는 2진수로 표현했을 때 맞힌 표적이 1이고 빗맞힌 표적이 0으로 표현된다. 여기서 C는 둘 중 한명만 맞힌 표적은 다 맞히고, 둘 다 맞히거나 둘 다 빗맞힌 표적은 빗맞혔다고 한다. 이는 C의 점수가 곧 각 비트를 XOR 연산한 결과와 같다는 뜻이 된다. Code fun main()=print(read.. 2023. 4. 20. [Kotlin] 백준 23294 : 웹 브라우저 1 문제 링크 23294번: 웹 브라우저 1 첫째 줄에 접속할 수 있는 웹페이지의 종류의 수 N, 사용자가 수행하는 작업의 개수 Q 와 최대 캐시 용량 C 이 순서대로 주어진다.(1 ≤ N, Q ≤ 2,000, 1 ≤ C ≤ 200,000) 둘째 줄에는 N개의 정수 CAPi www.acmicpc.net 문제 해설 [Kotlin] 백준 23300 : 웹 브라우저 2와 유사한 문제지만 캐시 용량의 제한이 추가되어 있는 문제이다. 캐시 용량을 다루는 것을 제외하면 기본적인 풀이는 동일하다. 각 페이지의 캐시 공간은 배열에 저장하여 사용했다. 뒤로 가기 공간과 앞으로 가기 공간을 각각 덱으로 구현하고 B 또는 F를 수행할 때마다 저장된 페이지와 현재 페이지를 옮기면 된다. 이 두 경우에는 이미 캐시 공간에 저장된 .. 2023. 4. 19. [Kotlin] 불변 컬렉션과 가변 컬렉션 목차 서론 코틀린의 컬렉션은 기본적으로 자바의 그것을 그대로 사용하지만 불변 컬렉션과 가변 컬렉션으로 구분된다는 차이가 있다. 물론 자바에서도 불변 컬렉션을 만드는 것이 불가능하진 않지만 불변이라는 것을 컴파일 타임에 검증할 수 없고, 만드는 것도 조금 번거롭기 때문에 완전하다고 보기는 어렵다. 이 글에서는 코틀린의 불변 컬렉션과 가변 컬렉션에 대해 다룬다. 컬렉션(Collection)? 컬렉션은 수집이라는 단어 의미 그대로 다수의 객체를 수집해놓은 객체라고 볼 수 있다. 컬렉션은 크게 리스트(List), 집합(Set), 맵(Map)으로 나눌 수 있다. List : 인덱스를 통해 요소에 접근할 수 있는, 순서가 보장된 컬렉션. 중복 요소가 허용된다. 스택과 큐, 덱 등의 자료구조도 큰 의미에서 리스트에 .. 2023. 4. 18. [Kotlin] 백준 9519 : 졸려 문제 링크 9519번: 졸려 첫째 줄에 X(1 ≤ X ≤ 1,000,000,000) 가 주어지고, 둘째 줄에 X번 깜박인 후의 단어가 주어진다. 단어는 알파벳 소문자로만 이루어져 있고, 길이는 구간 [3,1000]에 포함된다. www.acmicpc.net 문제 해설 눈을 \(x\)번 깜박인 결과로부터 원래 단어를 찾아내야 한다. 처음에는 단순히 문제에서 주어진 연산을 \(x\)번 역수행해서 구해보려고 했는데 입력의 최대치가 10억인 것을 보고 시간 초과가 날게 뻔해서 다른 방법을 찾아보기로 했다. 예제로 주어진 테스트 케이스를 직접 돌려보면 일종의 규칙이 있다는 것을 볼 수 있다. 0은 최초 입력으로 주어진 단어이고, 각 회차는 이전 단어에서 문제에서 주어진 연산을 역수행한 결과이다. 첫번째 예제의 경우.. 2023. 4. 17. [Spring Boot] 스프링부트 실행 시 나타나는 배너를 바꿔보자 목차 시작하기 전에 스프링부트로 애플리케이션을 개발하는 개발자라면 굉장히 익숙할 스프링 배너. 하지만 너무 자주 보는 배너라 그런지 가끔씩 질린다는 느낌이 들 때가 있다. 이런 경우에 새로운 기분을 느끼기 위해 콘솔에 찍히는 배너를 마음껏 커스텀해보자. 스프링부트 배너 교체 스프링부트는 기본적으로 프로젝트 경로 내부의 resources/banner.txt 파일에 작성된 내용을 출력하고, 해당 파일이 없을 경우에는 위의 아주 익숙한 스프링 배너를 출력한다. banner.txt를 만들고 아무 내용도 입력하지 않으면 이렇게 아예 배너가 나오지 않고 ============ 스프링부트 배너! ============ 내용을 입력하면 이렇게 입력한 내용이 출력되는 것을 볼 수 있다. 하지만 단순 텍스트만 출력되니까 .. 2023. 4. 14. [WebClient] WebClient를 사용하여 외부API 호출 후 처리할 비즈니스 로직을 비동기로 처리해보기 목차 문제의 상황 프로젝트를 진행하다 보면 여러 개의 외부 API를 호출하고 그 응답을 토대로 어떤 동작을 수행하는 경우가 있다. 일반적으로 많이 사용하던 RestTemplate의 경우에는 스프링 5.0부터 사소한 변경이나 버그 수정만 반영된다고 하길래 사실상 deprecated된게 아닌가 생각한다. 마침 스프링 5.0에 새로 추가된 WebClient가 비동기 방식도 지원한다고 하여 RestTemplate 대신 사용하고 있었다. WebClient를 사용하여 외부 API를 비동기 방식으로 호출하는 예제는 찾기 쉬웠지만 정작 외부 API의 응답을 토대로 추가적인 로직을 수행하는 예제는 사실상 없다시피 했다. 그래서 비동기 방식을 지원한다는 WebClient의 특성이 무색하게 CompletableFuture를.. 2023. 4. 12. [Kotlin] 백준 2086 : 피보나치 수의 합 문제 링크 2086번: 피보나치 수의 합 제 1항과 제 2항을 1이라 하고, 제 3항부터는 앞의 두 항의 합을 취하는 수열을 피보나치(fibonacci) 수열이라고 한다. 예를 들어 제 3항은 2이며, 제 4항은 3이다. 피보나치 수열의 a번째 항부터 b번째 www.acmicpc.net 문제 해설 피보나치 수의 성질을 이용하면 쉽게 풀 수 있는 문제다. 기본적으로 \(n\)에 대한 피보나치 수의 점화식은 \(F_n=F_{n-1}+F_{n-2}\)가 되는데 여기서 \(n\)에 \(n+2\)을 대입하고 식을 조금 정리하면 \(F_n=F_{n+2}-F_{n+1}\)이 된다. 이렇게 되면 \(F_n\)까지의 모든 피보나치 수의 합은 다음과 같다고 볼 수 있다. $$\sum_{k=1}^n F_k=\sum_{k=1.. 2023. 4. 10. [Kotlin] 백준 1630 : 오민식 문제 링크 1630번: 오민식 첫째 줄에 자연수 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 문제 해설 1~N의 모든 자연수로 나누어 떨어지는 수를 구해야 한다. 다시 말해 N이하의 모든 자연수의 최소 공배수를 구해야 하는데, 이는 N 이하인 소수들의 거듭제곱으로만 이루어진 곱인 소인수분해의 형태로 나타낼 수 있다. 예를 들어, \(N=10\)일 때 오민식을 만족하는 가장 작은 수인 2520은 \(2520=2^3\times 3^2\times 5\times 7\)로 나타낼 수 있다. 우선 N 이하의 모든 소수는 에라토스테네스의 체를 이용하여 구한다. 그리고 각 소수에 대하여 N 이하인 가장 큰 거듭제곱을 구해서 곱하면서 각 연산마다 987654321로 나.. 2023. 4. 8. 이전 1 ··· 7 8 9 10 11 12 13 ··· 28 다음