전체 글

기록, 성장
· Algorithm
출처https://school.programmers.co.kr/learn/courses/30/lessons/81303 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr  문제 이 문제는 n개의 노드가 연결된 링크드 리스트에서, 주어진 명령어들을 처리하여 선택/삭제/복구의 과정을 거쳐 리스트의 상태를 업데이트하고, 마지막 상태를 출력하는 문제입니다. 풀이커서가 돌아다니면서, 표 중간에 있는 데이터를 삭제하거나 복구 시 다시 끼워넣어야 하는 문제입니다. 가장 먼저 떠올릴 수 있는 자료 구조는 바로 연결리스트(Linked List)였습니다. 연결 리스트는 앞 뒤 노드에 대한 정보를 가지고 있기 때문에, 삭제와 ..
· Spring
저번 포스팅에서, 함께 결제시 모든 참가자가 실시간으로 메뉴를 선택/취소 할 수 있어야 했습니다. 실시간으로 빠른 처리를 위해 Redis에 객체를 저장해두고 수정/조회 작업을 수행하였는데, 거의 동시에 메뉴를 선택하는 경우에 앞 사람이 선택한 메뉴에 대한 정보가 누락되는 현상이 발생하였습니다. (1번 유저가 짜장면을 선택함과 거의 동시에 2번 유저가 짬뽕을 선택하면, Redis에 put 메서드로 저장을 하기 때문에 1번 유저가 선택한 짜장면에 대한 정보는 누락) 또한, 참가자 수에 제한을 두어 4명까지만 참가가 가능해야 하는데 더 많은 유저가 참여하는 상황도 생겼습니다. Redis에 OrderRoom 객체를 저장하기 이전에 Mysql에 저장했을 때는 단순하게 비관적 락을 걸어서 한 트랜잭션이 접근중일때는..
· Spring
안녕하세요. 이번 포스팅에서는 최근 레거시 스프링 프로젝트를 이용하여 진행했던 '함께 결제' 프로젝트에서 사용한 웹소켓과 STOMP에 대해 포스팅 해보려고 합니다. ❗❗❗❗❗ 스프링 부트가 아닌, 스프링 레거시 프레임워크만 사용한 프로젝트 입니다 ❗❗❗❗❗스프링 버전 : 5.3.37스프링 시큐리티 : 5.8.13Tomcat : 9.0.912Build : Gradle War 레거시 스프링이긴 하지만, 현재 포스팅하는 부분에 관해서는 스프링 부트와 크게 다르다고 느끼진 않았습니다. 지피티를 잘 활용하여 참고하신다면 부트에도 금방 적용 가능합니다. 함께 결제 프로젝트에 대해 간략하게 설명 드리면, 결제 방에 입장한 유저들은 자신이 결제할 메뉴를 선택하여 결제 후 정산이 아닌, 결제 시점에 따로 결제하는 프로젝..
· Algorithm
출처https://school.programmers.co.kr/learn/courses/30/lessons/1832 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 주어진 도로 상태의 상태에 따라, 목적지 까지 도착 가능한 전체 경로 수를 구하는 문제이다. 문제에 최단 경로라고 명시되어 있지는 않지만, 오른쪽 또는 아래 방향으로 이동 가능하다고 되어있기 때문에 최단 경로를 구하는 문제가 맞다. 보통 지도가 주어지고 최단 경로의 수를 구하려면 오른쪽 또는 아래 방향으로만 이동 가능하다고 가정하고 푼다. (왼쪽 지점과 위 지점 경우의 수를 더함) 풀이처음에는..
· Algorithm
출처https://school.programmers.co.kr/learn/courses/30/lessons/118669 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제한 출입구에서 출발하여 하나의 정상만을 거쳐 되돌아 오려고 한다. 이때, Intensity란 방문한 경로들 중 최대 가중치 값을 의미한다. 이 Intensity가 최소가 되도록 하는 경로를 구하여, 최소 intensity를 가지는 경로의 방문한 산봉우리 값과 , 최소 intensity값을 반환하는 문제이다. 풀이문제에서는, 한 출입구로 부터 출발하여 한 산봉우리까지 갔다가 돌아올 때, Int..
· Algorithm
출처https://www.acmicpc.net/problem/3190 문제 뱀이 진행하던 중 사과를 만나면 몸길이가 하나 추가된다. 사과가 없다면 몸길이는 변화없이 앞으로만 전진하며, 'D'를 만나면 오른쪽으로, 'L'을 만나면 왼쪽으로 방향을 바꾼다. 위 조건에 따라 뱀 게임을 진행하며, 머리나 몸에 부딪힐때 게임이 종료된다. 풀이특별한 알고리즘이 아닌, 구현, 시뮬레이션 문제이다. 직접 문제 조건에 따라 진행되도록 코드를 구현하면 된다. 시간을 늘려가며 while문에서 게임을 진행하고, 조건이 충족되면 게임을 종료하도록 한다. while문 안에서는 다음과 같은 순서로 진행된다.while (true) { - time 증가 - 뱀의 머리를 큐에서 빼서, 앞으로 한칸 전진시킴 - 벽에 부딪히거나..
· Algorithm
출처https://school.programmers.co.kr/learn/courses/30/lessons/92343 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제 주어지는 트리의 각 노드에는 양과 늑대 둘중 하나가 놓여져 있다. 노드를 돌아다니며 양과 늑대를 데리고 다니는데, 늑대가 양보다 많아지면 늑대가 양을 모두 잡아먹게 된다. 이 조건에 따라 각 노드를 순회하며 모을 수 있는 양의 최대 마릿수를 구하는 문제이다. 풀이처음에 이 문제를 일반적인 DFS 또는 백트래킹으로만 해결하려고 하였다. 하지만 한번 방문했던 노드도 다시 방문 해야하는 경우가 많기..
· Algorithm
출처https://www.acmicpc.net/problem/17142 문제비활성화된 바이러스가 있는 연구실이 주어진다. 바이러스는 활성화 되면 상하좌우가 동시에 감염된다. 이 중 M개의 바이러스를 골라 활성화상태로 시킨다고 할때, 연구실에 빈곳 없이 모두 감염될때 까지 걸리는 최소 시간을 구하는 문제이다.풀이먼저, 우리는 비활성화인 바이러스 중 M개를 골라야 한다. M개의 순서는 상관이 없기 때문에 순열이 아닌 조합을 구해야하며, 자바에서 조합을 구하기 위해서는 DFS를 활용해야 한다. 먼저, 바이러스의 위치가 담긴 List를 만들고 이 중 M개만 조합을 만든 뒤 바이러스를 전염시켜야 한다. M개의 조합을 기록하기 위해 DFS에서 현재 고른 배열을 들고다닐수도 있지만, 메모리 절약을 위해 전역 변수로 ..
PlatinumeOlive
PlatinumeOlive