본문 바로가기

전체 글

(223)
백준 17155 캐슬 디펜스 (Java) https://www.acmicpc.net/problem/17135 1. 문제캐슬 디펜스는 성을 향해 몰려오는 적을 잡는 턴 방식의 게임이다. 게임이 진행되는 곳은 크기가 N×M인 격자판으로 나타낼 수 있다. 격자판은 1×1 크기의 칸으로 나누어져 있고, 각 칸에 포함된 적의 수는 최대 하나이다. 격자판의 N번행의 바로 아래(N+1번 행)의 모든 칸에는 성이 있다.성을 적에게서 지키기 위해 궁수 3명을 배치하려고 한다. 궁수는 성이 있는 칸에 배치할 수 있고, 하나의 칸에는 최대 1명의 궁수만 있을 수 있다. 각각의 턴마다 궁수는 적 하나를 공격할 수 있고, 모든 궁수는 동시에 공격한다. 궁수가 공격하는 적은 거리가 D이하인 적 중에서 가장 가까운 적이고, 그러한 적이 여럿일 경우에는 가장 왼쪽에 있는 ..
백준 1727 커플 만들기 (Java) 1. 문제여자친구가 없는 남자 n명과 남자친구가 없는 여자 m명을 불러 모아서 이성 친구를 만들어 주기로 하였다. 하지만 아무렇게나 해줄 수는 없고, 최대한 비슷한 성격의 사람들을 짝 지어 주기로 하였다.당신은 뭔가 알 수 없는 방법으로 각 사람의 성격을 수치화 하는데 성공하였다. 따라서 각 사람의 성격은 어떤 정수로 표현된다. 이와 같은 성격의 수치가 주어졌을 때, 우선 최대한 많은 커플을 만들고, 각 커플을 이루는 두 사람의 성격의 차이의 합이 최소가 되도록 하려 한다. 남자-여자 커플만 허용된다.입력첫째 줄에 n, m(1 ≤ n, m ≤ 1,000)이 주어진다. 다음 줄에는 n명의 남자들의 성격이 주어진다. 그 다음 줄에는 m명의 여자들의 성격이 주어진다. 성격은 1,000,000이하의 자연수이다...
Hello, Nginx(feat. 무중단 배포) 1. 개요Tripot 프로젝트 첫 배포에 앞서 무중단 배포를 구축해보려 한다. 현재 환경에서 스프링부트 애플리케이션이 정상적으로 실행되는 데 대략 30초정도가 걸린다. CI/CD를 이용하여 배포를 진행하게 되면 30초가량 사용자가 서비스를 이용할 수 없음을 뜻한다. 현대에 이런 서비스는 존재하지 않는다. 몇 가지 경우를 찾다가 nginx를 사용하여 구축하는 방법을 택했다. 그런데 어떤 기술인지 알아야 제대로 쓸 것이 아닌가? 이 포스팅에서는 nginx가 어떤 건지 알아보고, 이를 사용해야 하는 이유를 기술하고자 한다. 2. Nginx란? Nginx는 "웹 서버" 이다. 간단히 말해 html, css 등 정적인 컨텐츠를 제공하는 프로그램이다. 보통 WAS와 묶어서 이야기하는 데 차이점을 간단히 짚고 넘어가..
스프링부트 테스트코드 작성하기: 통합 테스트 1. 개요MVC 계층의 단위 테스트를 모두 작성하였으니 이번에는 통합 테스트를 작성해보고자 한다. 2. 애노테이션@SpringBootTest@AutoConfigureMockMvc@TestPropertySource(properties = "spring.profiles.active=local")@Transactional@Import(SecurityConfig.class)@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)public class BaseIntegrationTest { ...} 위의 base class를 기반으로 각 클래스가 이를 상속받아 테스트를 진행한다. 각 애노테이션의 쓰임새를 알아보자.@SpringBoot..
백준 3687 성냥개비 (Java) 1. 문제성냥개비는 숫자를 나타내기에 아주 이상적인 도구이다. 보통 십진수를 성냥개비로 표현하는 방법은 다음과 같다.성냥개비의 개수가 주어졌을 때, 성냥개비를 모두 사용해서 만들 수 있는 가장 작은 수와 큰 수를 찾는 프로그램을 작성하시오.입력첫째 줄에 테스트 케이스의 개수가 주어진다. 테스트 케이스는 최대 100개 이다. 각 테스트 케이스는 한 줄로 이루어져 있고, 성냥개비의 개수 n이 주어진다. (2 ≤ n ≤ 100)출력각 테스트 케이스에 대해서 입력으로 주어진 성냥개비를 모두 사용해서 만들 수 있는 가장 작은 수와 가장 큰 수를 출력한다. 두 숫자는 모두 양수이어야 하고, 숫자는 0으로 시작할 수 없다.  2. 풀이성냥의 개수가 주어졌을 때 만들 수 있는 최솟값과 최댓값을 따로 구해주어야 한다.2..
백준 1943 동전 분배 (Java) https://www.acmicpc.net/problem/1943 1. 문제윤화와 준희는 솔선수범하여 쓰레기를 줍는 착한 일을 하였다. 원장선생님께서는 윤화와 준희를 칭찬하시고 과자나 사 먹으라고 하시며 동전 몇 개를 윤화와 준희에게 건네 주었다.그런데 돈을 받은 윤화와 준희는 좋아하기보다 고민에 빠지고 말았다. 원장선생님께 받은 이 돈을 어떻게 나누어 할지 고민에 빠진 것이다. 두 사람 모두 상대방이 자기보다 1원이라도 더 받는 것은 도저히 인정할 수 없어 한다. 따라서 돈을 똑같이 둘로 나누어 가져야 두 사람이 모두 만족할 수 있게 된다.하지만 두 사람에게 돈을 똑같이 나누는 것이 불가능한 경우도 있다. 예를 들어 500원짜리 1개와 50원짜리 1개를 받았다면, 이 돈을 두 사람이 똑같이 나누어 가질..
백준 2138 전구와 스위치 (Java) https://www.acmicpc.net/problem/2138 1. 문제N개의 스위치와 N개의 전구가 있다. 각각의 전구는 켜져 있는 상태와 꺼져 있는 상태 중 하나의 상태를 가진다. i(1 N개의 전구들의 현재 상태와 우리가 만들고자 하는 상태가 주어졌을 때, 그 상태를 만들기 위해 스위치를 최소 몇 번 누르면 되는지 알아내는 프로그램을 작성하시오.입력첫째 줄에 자연수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 전구들의 현재 상태를 나타내는 숫자 N개가 공백 없이 주어진다. 그 다음 줄에는 우리가 만들고자 하는 전구들의 상태를 나타내는 숫자 N개가 공백 없이 주어진다. 0은 켜져 있는 상태, 1은 꺼져 있는 상태를 의미한다.출력첫째 줄에 답을 출력한다. 불가능한 경우에는 -1을 출력..
신고 기능 구현 1. 개요이번에는 신고 기능을 구현해보았다. 신고, 신고 내역 조회, 처리 기능을 각각 구현해 볼 것이다.우선 이 프로젝트에서는 게시글 역할을 하는 스토리가 있고, 그 스토리에는 댓글을 달 수 있다. 스토리와 댓글에 따라 신고 내역에 표시되어야 하는 정보가 다르고, 이를 감안하여 기능을 구현할 예정이다. 2. ERD신고 테이블이다. 신고 타입에 따라 따로 처리를 하게 될 것이다. 이에 따라 story, comment와 다대일 관계를 맺게 되었고, 신고 타입이 story(comment)일 경우 comment(story)에는 아무것도 저장하지 않게 될 것이다.이외 처리상태, 사유, 처리 시각을 저장하도록 하였다.@Entity@Getter@Builder@NoArgsConstructor(access = Acce..