분류 전체보기 99

[백준 15486] 퇴사2

https://www.acmicpc.net/problem/15486 남은 N일 동안 최대한 많은 상담을 하려고 한다. 쉽게 생각해보면 day[상담을 잡은 날] = ? //?: ex=3 상담을 잡은 날 + day[상담을 잡은 날] =>ex) 1+array[1] = 1+3 = 4 // 4일째부터 가능 result+=profit[상담을 잡은 날] 일단 가장먼저 생각나는 dfs를 이용한 완전탐색으로 풀어보면 #include #include #include using namespace std; int N; int day[1500001]; int profit[1500001]; int maxRes = -10000; void dfs(int 상담날짜,int 총금액) { int 금액 = profit[상담날짜]; 총금액 +..

Algorithm/BOJ 2023.05.23

말만 들어도 어려워 보이는 트랜잭션에 대해 자세히 살펴보자 1편

개요 프로젝트를 진행하면서 가끔씩 service부분에서 @Transaction이 readOnly=true로 되어있어 현재 수행하는 작업 단위(save,update등)가 불가능하다는 오류가 발생했다는 에러코드가 뜹니다. 물론 제가 아는 바 로는 트랜잭션이 하나의 단위로 원자성 단위로 진행되기 위해 선언한다고 대충은 알고 있습니다. 하지만 트랜잭션은 기술면접에서도 중요하게 다루며 자주 생각해야하고 마주쳐야 하는 문제이기 때문에 이번 기회를 통해 자세히 살펴보려고 합니다. 이번 시간을 통해 굉장히 긴 내용으로 다루게 될것이며 학교수업과 데이터베이스 개론의 책을 보며 정리하는 글이므로 자세하게 공부하고 싶은 분은 이번 글을 통해 배워가셨으면 좋겠습니다. 트랜잭션이란 데이터베이스는 다수의 사용자가 동시에 사용하더..

11주차 CafeMate 브랜치에서 실수로 다른 기능 구현을 했을때

문제 인지 현재 저의 사항은 다음과 같습니다. 보시다시피 feature-auth 브랜치에 다음과 같은 문제가 발생했습니다. 1. feature-auth는 인증 관련 기능을 수행하는 브랜치 2. 브랜치를 바꾸지 않은 상태로 상품등록폼 구현 및 리스트 구현 중에 브랜치 바뀌지 않은 상태였다는 것을 인지 3. 다행이 아직은 커밋을 하지 않은 상태 문제 해결 어떻게 하면 안전하게 상품등록폼 구현 및 리스트 구현중인 작업을 feature-product 브랜치에 옮길 수 있을까 고민을 해봤습니다. 저의 생각은 다음과 같습니다 먼저, develop브랜치로 switch 2번째, develop 브랜치에서 feature-branch를 생성(git checkout -b feature-branch): 위의 그림처럼 아직 생성..

10주차 CafeMate 시큐리티 인증 구현

implementation group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: '3.0.5' 시큐리티를 구현하기 위해 먼저 MVN Repository에서 위의 코드를 따와 의존성 주입을 하였습니다. 현재 저희가 진행 중인 스프링부트 버전은 3.0.5 버전으로 2.7+ 버전에서부터는 Spring Security의 WebSecurityConfigureAdapter를 통해 security config를 override 할 때 오류가 발생합니다. 따라서 아쉽게도 제가 알고 있던 방식으로는 더 이상 진행할 수 없기에 이참에 새로운 버전인 시큐리티를 공부하며 인증구현을 하도록 하겠습니다. 비교 다음은 HTTP로 모든 엔드..

10주차 CafeMate RESTAPI 작성

인증 페이지(비회원): GET /auth/signin : 로그인 페이지로 이동 POST /auth/signin: 로그인 요청 GET /auth/signup: 회원가입 페이지로 이동 POST /auth/signup: 회원가입 요청 GET /auth/admin/signup : member가입 페이지로 이동 POST /auth/admin/signup: member 가입 요청 회원관리페이지(관리자용): GET /admin/customers: customer 목록 조회 페이지로 이동 GET /admin/customers/{customerId} : 특정 customer 수정 페이지로 이동 GET /api/customers :customer 데이터들 불러오기 PUT /api/customers/{id}/status :..

[백준 16236] 아기상어

처음 아기상어 크기: 2 1초에 상하좌우로 인접한 한 칸씩 이동 아기상어의 크기 물고기의 크기 : 이동가능O 먹을 수 O 아기상어의 크기 = 물고기의 크기: 이동가능 O 먹을수 X 물고기 먹는 순서 1. 먹을 수 있는 물고기가 1마리라면, 그 물고기를 먹으러 간다.(9는 상어) 0 0 0 0 0 0 1 0 9 2. 먹을 수 있는 물고기가 1마리보다 많다면 거리가 가장 가까운 물고기를 먹으러간다. 0 1 0 0 0 0 1 0 9 3. 거리가 같은 물고기가 많다면 가장위, 가장 왼쪽 물고기를 먹는다. 1 0 1 0 9 0 0 0 1 먹을 수 있는 물고기가 있는 칸으로 이동했다면 그 칸은 0이 된다. 아기상어는 자신의 크기와 같은 수의 물고기를 ..

Algorithm/BOJ 2023.05.07

[백준 1475] 방번호

한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있고 다솜이의 방 번호가 주어지면 필요한 세트의 개수의 최솟값을 구해야한다. 그래서 예를들면 1234 번호가 주어지면 1,2,3,4번 카드가 각각 1장 씩 필요하므로 이렇게 표현이 가능하다. 이것은 1세트로 가능한 번호이다. 다음 예시로는 1233이 주어졌을때를 보면 1,2는 각각 1장 필요하고 3은 2장이 필요하다 이것은 2세트가 있어야 이 방번호를 표현할수있다. 이렇게 위 배열을 표현하기 위해서는 방번호가 주어졌을때 방번호의 숫자를 분리하고 그 숫자에 해당하는 인덱스값을 1씩 증가 시키면 저 배열이 표현이 가능하다. 그다음으로 배열에 있는 값중 가장 큰 값이 우리가 구하려는 세트의 최솟값이다. 다음으로 고려해야할것은 6과 9이다. 예를들어 669가 주어..

Algorithm/BOJ 2023.05.03

[백준 14500] 테트로미노

1x1 4개를 이어 붙인다. 총 5가지가 있다. 테트로미노는 반드시 한 정사각형이 정확히 하나의 칸을 포함하도록 놓아야 하며, 회전이나 대칭을 시켜도 된다. 따라서 5가지가 아니라 파랑색은 2가지 노란색 1가지 오랜지색은 8가지 연두색은 4가지 보라색은 4가지이다. 총 그래서 19가지 이 경우를 모두 할 수 있도록 미리 방향배열을 만들고나서 이 방향배열들을 모두 실행하도록하면 19*4 = 76 그리고 이 76번의 연산이 모든 배열에서 실행되므로 500\*500\*76 = 약 40000 500 => 20000000 약 2천만번의 연산이 일어난다. 시간제한은 2초 약 2억번의 연산을 감당할 수 있으므로 충분히 가능하다. 그래서 브루드포스로 무식하게 풀어도 가능한 문제이다. 그렇게 풀도록 하자. (딱히 다른 ..

Algorithm/BOJ 2023.05.02