본문 바로가기

전체 글178

25961 - 스코어보드 보기 귀찮아 step 1더보기지수의 등수를 계산하는 것부터 해봅시다. 만약 지수보다 더 위에 있는 사람이 문제를 풀었다면 그 경우 지수의 등수에 아무런 영향이 없습니다. 지수보다 등수가 낮은 사람이 문제를 풀었어도 등수에 영향이 없습니다. 정확히 지수와 같은 문제를 풀었으면서 마지막 문제를 지수보다 늦게 푼 사람이 한 문제를 더 푸는 경우 지수의 등수가 하나 내려갑니다.지수가 문제를 푼 경우 지수의 등수는 {푼 문제 수가 지수와 같거나 더 많은 사람의 수} + 1입니다. 만약 지수가 5문제를 풀었다면 5문제 이상 푼 사람 수 +1이 되는 것입니다. 이것은 푼 문제 수를 기준으로 부분합처럼 값을 저장해 두면 쉽게 구할 수 있습니다.step 2더보기이제 수상권에 들기 위해 풀어야 하는 문제 수를 구해봅시다. 지수의 등수.. 2024. 11. 18.
spring boot - 공통 api 만들기 사람들이 항상 올바른 요청만 한다면 정말 행복한 세상이 될 것입니다. 하지만 인증 번호를 틀리거나 해킹을 하거나 로그아웃이 되었는데 그걸 모르고 권한이 없는 요청을 하기도 하죠. 그런 일이 발생했을 때도 제대로 된 응답을 내려주기 위해 Api 응답을 잘 꾸며주도록 하겠습니다.구조 만들기저는 다음과 같은 구조를 만들 것입니다.{ "result": { "result_code" : 200 "result_message" : "OK" "result_description" : "유저 등록 완료!" }, "body": { ~~~ }} body는 응답에 따라 달라질 수 있습니다. 우선 result부분부터 만듭니다. 그리고 Api 클래스를 만듭니다. body는 바뀔 수 있기 때문에 generic으로 만들어 줍니다.. 2024. 11. 15.
12877 - 먹이 사슬 step 1더보기이 문제를 쉽게 사람들이 가위바위보를 하는 것으로 생각하겠습니다. A와 B의 승패, B와 C의 승패를 알면 A와 C의 승패를 알 수 있습니다. 이제 승패를 아는 사람들끼리 하나의 그룹으로 묶는다고 생각하겠습니다.처음에는 어떠한 승패도 모르니 전부 크기 1인 그룹에 들어가 있습니다.어떤 두 사람이 다른 그룹이 들어가 있으면 절대 모순이 발생하지 않습니다. 승패에 상관없이 그 사람들이 포함된 그룹을 하나로 묶어줍니다. 만약 같은 그룹에 들어가 있으면 이제 계산을 해 줘야 합니다.step 2더보기Union find를 이용해 그룹을 묶어줄 수 있습니다. 이때, 자신과 부모 사이의 승패도 같이 기록해 둡니다.다음과 같은 상황을 생각해 봅시다. 1은 부모가 이긴 것, -1은 부모가 진 것, 0은 무.. 2024. 11. 11.
spring boot - 비동기 작업 처리 서버를 만들다 보면 비동기로 처리해야 하는 일들이 있습니다. 이 경우 Async를 이용해서 비동기로 작업을 처리할 수 있습니다.동기와 비동기동기와 비동기의 차이점을 간단히 짚고 넘어가겠습니다. 보통 프로그램은 위에서부터 아래로 순서대로 명령을 처리합니다. 이것을 동기(syncronous)적으로 처리한다고 합니다. 이 경우 작업이 오래 걸리는 일이 있으면 그 일을 처리할 때 까지 다음 일을 진행할 수 없습니다.서버에서 메일을 보낸다고 가정해 봅시다. 보통 메일을 보내면 메일을 수신하는 데 5초 정도의 시간이 걸립니다. 이것을 동기로 처리하면 서버가 작업을 완료하고 응답을 보내는 데 5초 정도의 시간이 걸린다는 것입니다. 그럼 유저들은 5초 동안 서버가 멈춘 것 같은 느낌이 들 것입니다. 하지만 메일은 보통.. 2024. 11. 8.
15005 - Collatz Conjecture 번역더보기길이 $N$인 수열 $A$가 주어집니다. $1 \le i \le j \le N$인 $i, j$에 대해서 $f(i,j) = \gcd(a_i, a_{i+1},...,a_j)$를 생각해 봅시다. 모든 $f(i,j)$가 가질 수 있는 값의 개수를 출력하시오.step 1더보기$j$가 정해졌고 $i$가 $j$부터 하나씩 감소한다고 생각해 봅시다. 처음에는 $\gcd(a_j)$이니 당연히 $a_j$일 것입니다. 다음은 $\gcd(a_{j-1}, a_j)$, 다음은 $\gcd(a_{j-2}, a_{j-1}, a_j)$가 될 것입니다. 이때, $f(i,j)$는 계속해서 감소하고 $f(i,j)$가 변하는 지점은 많아야 $\log_2 {a_j}$입니다.step 2더보기$i$가 $N$부터 1까지 감소하고 각 $i$마.. 2024. 11. 4.
웹 개발 - 프로젝트 2 - 13. 이메일 인증 회원가입 기능이 있는 서비스에서 아무런 인증 없이 사람들을 받으면 계정을 막 만들어서 DB를 터트리거나 유령 계정이 만들어지는 등 문제가 생길 수 있습니다. 그래서 이메일 인증 같은 방식을 적용을 합니다. 물론 이정도 크기의 서비스에서는 큰 문제가 없겠지만 그래도 한번 적용해 봅시다.메일 전송이메일 인증은 보통 다음 과정으로 이루어 집니다. 1. 유저가 입력한 이메일로 코드 전송 ex) NSDG-JEIT2. 유저는 이메일에 있는 코드를 입력3. 코드가 일치하면 인증 완료 메일 전송은 이전 포스트를 참조하면 세팅을 할 수 있습니다.우선 request부터 만듭니다. 회원가입과 비밀번호 찾기 2개를 지원할 것이기 때문에 type을 넣어줍니다. 이메일 전송 기능을 만듭니다. setTo : 받는 사람setSubj.. 2024. 11. 1.