[Python] BOJ 13422 도둑 t = int(input()) for i in range(t): # n 집의 개수 # m 연속된 집의 개수 # k 최소 돈의 양 (k를 넘으면 안됨) n, m, k = map(int, input().split()) lst = list(map(int, input().split())) if m != n: for i in range(m-1): lst.append(lst[i]) sum_lst = [0] total = 0 for i in lst: total += i sum_lst.append(total) start = 0 end = m count = 0 while end != len(sum_lst): if sum_lst[end] - sum_lst[start] < k: count += 1 start += 1 end..
[Python] 백준 1806 부분합 n, s = map(int, input().split()) lst = list(map(int, input().split())) # 1. 누적합을 구해놓는다 sum_lst = [0] total = 0 for l in lst: total += l sum_lst.append(total) # 누적합 배열이 0부터 시작하기 때문에 # start = 1, end = 2 부터 시작하기 # m은 n+1로 최대값으로 만들어 놓기 start = 1 end = 2 m = n + 1 # 만약 누적합 배열의 첫번째에 내가 찾고자하는 값이 있으면 -> 길이가 1인게 있다는 뜻! if sum_lst[1] == s: m = 1 # 그런게 없다면 else: # 투포인터로 계속 탐색하기 while end = s: m = min(m, e..
[Python] 백준 2346 풍선 터뜨리기 https://www.acmicpc.net/problem/2346 2346번: 풍선 터뜨리기 1번부터 N번까지 N개의 풍선이 원형으로 놓여 있고. i번 풍선의 오른쪽에는 i+1번 풍선이 있고, 왼쪽에는 i-1번 풍선이 있다. 단, 1번 풍선의 왼쪽에 N번 풍선이 있고, N번 풍선의 오른쪽에 1번 풍선 www.acmicpc.net from collections import deque n = int(input()) lst = list(map(int, input().split())) queue = deque((i+1, lst[i]) for i in range(len(lst))) # (index, value) result = [] while queue: num = queue.popleft() result.app..
[Python] 백준 13414 수강신청 https://www.acmicpc.net/problem/13414 13414번: 수강신청 입력 데이터는 표준 입력을 사용한다. 입력은 1개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 과목의 수강 가능 인원 K(1 ≤ K ≤ 100,000)와 학생들이 버튼을 클릭한 순서를 기록한 대기목 www.acmicpc.net n, k = map(int, input().split()) dic = dict() for i in range(k): num = input() dic[num] = i sorted_dic = {key : dic[key] for key in sorted(dic, key=lambda x: dic[x])} count = 0 for i in sorted_dic: if n == count: bre..
[Python] 백준 10825번 국영수 https://www.acmicpc.net/problem/10825 10825번: 국영수 첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1 www.acmicpc.net 문제 국어 점수가 감소하는 순서로 국어 점수가 같으면 영어 점수가 증가하는 순서로 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.) 풀이 n = int(input()) list = [] for i in range(n): list.app..
썸네일 GitHub에서 Release Tag 자동화하기 (+ ArgoCD) Git Flow 나의 경우 아래와 같이 깃 플로우를 설정하고 개발을 해왔었다. Main 브랜치는 출시 가능한 프로덕션 코드를 모아두는 브랜치이며, 배포된 각 버전을 Tag를 이용해 표시한다. Develop 브랜치는 다음 버전 개발을 위한 코드를 모아두는 브랜치로 개발이 완료되면 Main 브랜치로 merge된다. Feature 브랜치는 하나의 기능을 개발하기 위한 브랜치로, Develop 브랜치에서 분기되며, 기능이 개발 완료되면 다시 Develop 브랜치로 merge된다. Release 브랜치는 소프트웨어 배포를 준비하기 위한 브랜치 Develop 브랜치에서 배포될 준비가 됐다면 Release 브랜치로 merge된다. Release Tag 자동화 하기 내가 선택한 과정을 다음과 같다! Dev barnch..
[BOJ] 2003번 수들의 합2 - 구간합, 투포인터 https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net 방법 1 : 구간합 n, m = map(int, input().split()) list = list(map(int, input().split())) # 합배열 만들기 total = 0 sum_list = [0] for i in range(len(list)): total += list[i] sum_list.append(total) # 구가합을 빼면서 m이랑 ..
Mockito 공식문서 읽고 정리하기 (1) 1. Mocking ? Mocking은 소프트웨어 개발에서 테스트를 위해 가짜 객체를 생성하는 기술이다. 테스트에서 Mock 객체는 실제 객체를 대신하는 가짜 객체로 사용되며, 실제 객체를 호출하거나 상호작용할 필요 없이 테스트 코드에서 사용된다. Mock객체는 일반적으로 목적에 맞게 구현된 가짜 객체로, 실제 객체의 인터페이스를 구현하거나, 또는 해당 인터페이스를 상속받아 구현할 수 있다. Mocking은 일반적으로 단위 테스트(Unit Testing)에서 사용되며, 의존성이 있는 객체를 테스트하는 데 매우 유용하다. 또한, Mocking을 통해 복잡한 시스템을 테스트하거나 외부 서비스와의 상호작용을 테스트할 수 있다. 2. Mockito ? Mockito는 자바에서 Mocking을 위한 오픈소스 프레..
썸네일 [Spring Boot] 소셜로그인 구현하기 - 카카오편 (카카오, 구글, JWT ...) 0. 소셜로그인 ? 1. 카카오 소셜로그인 1. 카카오 로그인 과정 사용자가 서비스에서 카카오 로그인 버튼을 클릭하면 서비스는 카카오 인증 서버로 인가 코드 발급을 요청 카카오 인증 서버는 사용자에게 인증을 요청 (= 계정 정보를 입력해 로그인하는 화면 출력) 카카오 인증 서버는 사용자 인증 성공 시, 서비스 앱의 동의 항목 설정을 바탕으로 사용자에게 동의 화면을 출력 사용자가 필수 동의 항목에 동의하고 로그인을 요청하면, 카카오 인증 서버는 인가 코드(Authorization Code)를 발급해 서비스 앱에 등록된 Redirect URI로 전달 서비스는 전달받은 인가 코드로 토큰을 요청하여 받음 2. 회원 확인 및 가입 서비스는 카카오 로그인을 완료하여 발급받은 토큰으로 사용자 정보 가져오기를 요청 카..
썸네일 JDBC Template 공부하기1 (query, queryForObject, update) 1. JDBC, JDBC 템플릿이란. ? JDBC는 데이터베이스의 종류에 상관없이 API를 이용해서 처리할 수 있게 도와주는 것이다. 하지만 JDBC API를 사용하려면 DB 연동을 위해 Connection 객체를 생성해주어야 하며, 쿼리 작성 후 쿼리 실행을 위한PreparedStatement 객체를 생성해주어야 했다. 또한 쿼리를 실행한 이후에는 ResultSet을 이용하여 결과를 처리하고 close() 메서드로 닫아주는 과정이 필요하다. List list = new ArrayList(); String sql = "SELECT * from REVIEW"; Statement stat = conn.createStatement(); ResultSet rs = stat.excuteQuery(sql); whi..
AWS EC2 서버 무중단 배포/백그라운드 실행 1. AWS ssh 키로 접속하기 예시 : ssh -i "나의 인스턴스 이름" ubuntu@퍼블릭 IPv4 DNS 나의 인스턴스에서 연결 버튼을 누르고 ssh 클라이언트에서 해당 명령어 확인 가능 2. 디렉토리 이동 배포하고자 하는 디렉토리로 이동하기 3. nohup java -jar build/libs/demo-0.0.1-SNAPSHOT.jar & 다음과 같은 명령어로 빌드 후 아래와 같은 문구가 뜨면 성공 exit 명령어를 통해 터미널에 나와야지 백그라운드 프로세스가 계속 실행됨! ㄴ 왜 aws에 배포를 했는데 무중단 배포가 안될까하다가 알게된 사실들 ... ^^
썸네일 헤로쿠 배포 과정과 마주친 문제들 (H10, H14 ...) aws 배포를 하기 전 헤로쿠로 배포를 하게되었는데, 이때 마주친 문제들을 기록하고자 한다.. 먼저 헤로쿠 배포 과정을 간단히 설명하겠다. 헤로쿠 회원 가입 및 앱 생성 과정을 먼저 거친 후 다음과 같이 수행해주면 된다. # 1. 헤로쿠 로그인 $ heroku login # 2. 코드가 있는 폴더로 이동 (자신의 폴더명으로!) $ cd Desktop/heroku # 3. 깃 초기화 $ git init # 4. 연동 $ heroku git:remote -a {앱이름} # 5. 배포하기 $ git add . $ git commit -am "commit comment" $ git push heroku main $ heroku open 하지만 이렇게 배포하게 되면 무조건! 에러를 마주치게 된다. 1. H10-A..