본문 바로가기

전체 글21

[백준] 암호만들기 진짜 오랜만에 알고리즘을 풀었다.완전탐색으로 해결할 수 있는 간단한 문제였으나, 조합이 순간 기억이 안 나 조금 헤멨다. 모음이 1개, 자음이 2개 이상 무조건 들어가야 하는 조건을 충족시키기 위해 set의 contains를 통해 시간복잡도를 줄였다.조합에서는 C가 15 이하라는 조건이 있어 비트마스킹을 통해 시간복잡도를 줄일 수 있었다.import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.*;public class Main { static int l, c; static List arr, ans; static Set ms; public static.. 2025. 1. 5.
[프로그래머스] 등산 코스 정하기 다익스트라를 쓰되, 노드 연결을 할 때 고민을 해야 하는 문제였다.게이트와 봉우리는 각각 들어오고, 나가고 하나씩만 연결되도록 한 후 다익스트라를 통해 풀이할 수 있었다.import java.util.*;class Solution { static class Node implements Comparable { int to; int v; public Node() {} public Node(int to, int v) { this.to = to; this.v = v; } public int compareTo(Node o) { if(this.v =.. 2024. 12. 9.
Spring Batch란? Spring Batch란?대용량 데이터를 처리하기 위한 프레임워크주기적이고 반복적인 작업을 실행하는 데 사용반복, 재시도, skip 처리 실패한 배치 작업을 다시 시작하거나 skip 할 수 있음모니터링배치 작업의 진행 상태와 소요 시간 정보 제공트랜잭션 관리트랜잭션 관리를 지원하여 데이터 일관성 유지실행 순서@EnableBatchProcessing 필요Job → Step → ItemReader → ItemProcessor → ItemWriterJob으로 하나의 배치 작업을 정의Step에서 하나씩 수행읽기 → 처리 → 쓰기 과정을 거침Step을 등록하기 위한 Bean 등록 필요Step 단계Chunk대량의 데이터를 끊어서 처리할 최소 단위읽기 → 처리 → 쓰기 작업이 청크 단위로 진행PlatformTrans.. 2024. 11. 24.
[OAuth2] X(구 트위터) 로그인 API 사용기 X 소셜 로그인을 뚜복 프로젝트에 적용하면서 시행 착오를 겪었다.일반 소셜 로그인과 다른 부분이 한 가지 있었고, 이를 정리한 블로그가 많이 없어 정리를 해두려고 한다.X는 소셜 로그인에 PKCE(Proof Key for Code Exchange)를 사용한다.💡 PKCEOAuth2.0의 보안을 강화하기 위한 확장 인증 방식- 클라이언트가 랜덤한 문자열(code verifier) 생성 - 이를 해시하여 code challenge 생성 - 인증 요청 시 code challenge를 함께 전송 - 인증 코드를 받은 후, 엑세스 토큰 요청 시 원래의 code verifier 전송 - 서버는 전송받은 code verifier를 해시하여 처음 받았던 code challenge와 비교 검증 나는 이 PKCE를 Sp.. 2024. 11. 17.
[프로그래머스] 표현 가능한 이진트리 import java.util.*;class Solution { public int[] solution(long[] numbers) { List answers = new ArrayList(); for (long num : numbers) { String str = Long.toBinaryString(num); int len = str.length(); int result = cal(makeTreeStr(len, str)); if (result == -1) { answers.add(0); } else { answers.add(.. 2024. 11. 11.
[프로그래머스] 표 병합 약간 삼성 B형 느낌이 났던 문제.구현 문제라서 시간이 좀 걸렸고, 한 글자를 잘못 써서 헤멨던 문제다.구현 문제를 풀 때는 꼼꼼하게, 주석을 작성하면서 푸는 습관을 들여야겠다.import java.util.*;class Solution { static String[][] table; static int[] parent; public static String[] solution(String[] commands) { List answers = new ArrayList(); table = new String[50][50]; parent = new int[2500]; for(int i = 0; i 2024. 11. 4.