전체 글 70

[백준] 1021번: 회전하는 큐 - Java

문제https://www.acmicpc.net/problem/1021주어진 수열에서 숫자를 하나씩 뽑아내야 하는데, 이때 큐를 왼쪽 또는 오른쪽으로 회전시켜 원하는 숫자를 가장 앞에 놓는 작업을 최소화해야 합니다. 주어진 수열을 순서대로 뽑아내기 위해 큐를 회전하는 최소 횟수를 구하는 것입니다. 접근 방법덱(Deque) 자료구조 사용덱은 큐와 스택의 특성을 모두 갖춘 자료구조로, 양 끝에서 삽입과 삭제가 가능합니다. 이를 통해 큐의 좌우 회전을 쉽게 구현할 수 있습니다.최소 회전 횟수 계산현재 뽑아내려는 숫자의 위치에 따라 왼쪽으로 회전하는 것이 빠를지, 오른쪽으로 회전하는 것이 빠를지 판단합니다.왼쪽으로 회전할 때와 오른쪽으로 회전할 때의 횟수를 비교하여 더 적은 횟수만큼 회전합니다. 코드import ..

[백준] 2304번: 창고 다각형 - Java

문제https://www.acmicpc.net/problem/2304여러 개의 기둥이 주어졌을 때, 이 기둥들을 사용해 만든 창고의 지붕 면적을 구하는 문제입니다. 각 기둥은 위치와 높이로 정의되며, 모든 기둥의 폭은 1입니다. 접근 방법기둥 배열 정렬: 기둥들을 위치에 따라 오름차순으로 정렬합니다.최고 높이의 기둥을 중심으로 면적 계산:왼쪽에서 최고 기둥까지: 왼쪽에서 오른쪽으로 진행하면서 높이가 증가할 때마다 면적을 계산합니다.오른쪽에서 최고 기둥까지: 오른쪽에서 왼쪽으로 진행하면서 높이가 증가할 때마다 면적을 계산합니다.최고 높이의 기둥 면적 추가: 마지막으로 최고 높이의 기둥 면적을 더해줍니다. 코드import java.io.BufferedReader;import java.io.IOExceptio..

[백준] 1417번: 국회의원 선거 - Java

문제https://www.acmicpc.net/problem/1417다솜이는 선거에 출마했는데, 자신을 제외한 다른 후보들도 있습니다. 각 후보의 득표 수가 주어졌을 때, 다솜이가 다른 후보들보다 많은 표를 얻기 위해 최소 몇 명의 유권자를 매수해야 하는지 구하는 문제입니다.다솜이가 매수할 때마다 다른 후보의 득표 수는 1씩 감소하고 다솜이의 득표 수는 1씩 증가합니다. 이 과정을 반복해 다솜이가 가장 많은 표를 얻게 하는 것이 목표입니다. 접근 방법우선순위 큐 사용: 다솜이를 제외한 다른 후보들의 득표 수를 관리하기 위해 우선순위 큐(최대 힙)를 사용합니다.매수 과정 반복: 가장 많은 표를 가진 후보를 찾아 매수를 진행합니다. 다솜이의 표가 그 후보보다 많아질 때까지 이 과정을 반복합니다.반복문 종료:..

[백준] 1072번 : 게임 - Java

문제https://www.acmicpc.net/problem/1072현재 진행한 게임 수와 이긴 게임 수가 주어질 때, 승률을 1% 이상 올리기 위해 추가로 진행해야 하는 최소 게임 수를 구하는 문제입니다. 승률은 (이긴 게임 수 / 총 게임 수) * 100 으로 계산됩니다. 접근 방법이분 탐색: 추가로 진행할 게임 수를 이분 탐색을 통해 효율적으로 찾습니다.left, right, mid를 사용하여 이분 탐색을 수행합니다.mid는 추가로 진행할 게임 수의 중간값을 나타냅니다.새로운 승률을 계산한 후, 현재 승률과 비교하여 조건에 맞게 left 또는 right를 조정합니다.현재 승률 계산: (int) ((long) wonGames * 100 / totalGames)를 통해 현재 승률을 계산합니다. 여기서 ..

[백준] 16926번 : 배열 돌리기 1 - Java

문제https://www.acmicpc.net/problem/16926주어진 N x M 크기의 2차원 배열과 정수 R이 주어집니다. 배열의 각 층을 시계 방향으로 R번 회전시키는 문제입니다. 배열의 크기와 회전 횟수에 따라 각 층이 어떻게 변하는지 구현하는 문제입니다.접근 방법층 분리:배열을 층별로 나누어 각 층을 별도로 다룹니다. 각 층은 외부에서 내부로 원형으로 구성된 요소들의 집합입니다.회전 처리:각 층을 회전시키기 위해, 우선 각 층을 1차원 배열로 변환한 뒤 회전한 후, 다시 2차원 배열로 복원합니다.출력:변환된 배열을 출력합니다.해결 방법층 분리:각 층의 시작과 끝 좌표를 정의하고, 해당 좌표에 위치한 요소들을 1차원 배열로 변환합니다.회전 처리:1차원 배열로 변환된 층을 시계 방향으로 회전합..

[예약 구매] 자동화 테스트 툴

자동화 테스트 툴 Docker 설정이 포스팅에서는 Docker를 사용하여 자동화된 회원가입 테스트를 실행하는 설정을 소개합니다. 이 설정은 Python을 기반으로 하며, Docker 컨테이너 내에서 실행됩니다. Dockerfile# DockerfileFROM python:3.9-slimWORKDIR /appCOPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txtCOPY . .CMD [ "python", "./http_request_tool.py" ]# 회원가입이 이미 돼있는경우#CMD ["python", "http_request_tool.py", "--skip_registration"] FROM python:3.9-slim: Py..

[예약구매] 상품 상세 조회 캐싱 적용 전과 후

상품 상세 조회 시, 데이터베이스로부터 매번 데이터를 가져오는 것은 성능 저하를 초래할 수 있습니다. 이를 개선하기 위해 캐싱을 도입할 수 있습니다. Product Entity@Entity@Getter@NoArgsConstructor@AllArgsConstructor@Builder@Table(name = "products")public class Product extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private String name; @Column(nullable = false) pri..

[예약구매] 재고 감소 동시성 테스트

여러 사용자가 동시에 재고를 감소시킬 때, 재고 수량이 올바르게 감소하지 않거나, 재고가 음수가 되는 등의 문제가 발생할 수 있습니다. 이번 포스팅에서는 스프링 부트와 JPA를 사용하여 재고 감소 기능을 구현하고, 동시성 문제를 해결하는 방법과 이를 테스트하는 방법을 소개합니다. 1. 재고(Stock) 엔티티@Entity@Getterpublic class Stock { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long productId; private Long quantity; public Stock(Long productId, Long quantity) { ..

[항해 취업 리부트 코스] 개인프로젝트 3주차 WIL

이번 주 항해 취업 리부트코스에서 내가 구현한 기능은 무엇인가요?MSA 도입, 서비스별로 분리 중Redis 구현 중해당 기능을 구현하기 위해, 어떤 기술적 의사결정을 거쳤나요?API GatewaySpring Cloud Gateway장점:Spring 생태계와의 통합성: Spring Boot, Spring Security 등과의 원활한 통합.강력한 라우팅 및 필터 기능: 다양한 라우팅과 필터를 통해 요청을 세밀하게 제어 가능.Reactive 프로그래밍 지원: 고성능 비동기 프로그래밍 모델 제공.확장성: 커스터마이징이 용이하여 다양한 요구사항에 맞출 수 있음.단점:복잡성: Spring Boot와 Spring Cloud의 학습 곡선이 존재.Spring 종속성: Spring 생태계를 사용하지 않는 환경에서는 부적..

[Spring] API Gateway

API Gateway사용자가 설정한 라우팅 설정에 따라서 각각 엔드포인트로 클라이언트 대신해서 요청하고 응답을 받으면 다시 클라이언트에 전달해주는 프록시 역할을 하게됩니다. 시스템의 내부 구조는 숨기고 외부의 요청에 대해서 적절한 형태로 가공해서 응답할 수 있는 장점을 가지고 있습니다. 구축하는 방법1. Spring Cloud GatewaySpring Cloud Gateway는 Spring Boot 2.x 이상에서 사용할 수 있는 API Gateway 솔루션입니다. 마이크로서비스 아키텍처를 지원하며, Spring 생태계와의 뛰어난 통합성을 자랑합니다.장점:Spring 생태계와의 통합성: Spring Boot, Spring Security 등과의 원활한 통합.강력한 라우팅 및 필터 기능: 다양한 라우팅과 ..