전체 글 607

[백준, 자바, 20920번] 영단어 암기는 괴로워

풀이해당 문제는 다양한 방법이 있을 것 같은데우선 아래의 풀이는 다음과 같음입력으로 주어지는 단어를 확인 후 조건에 따라 분류하는데우선 길이가 M이상의 경우를 체크한 뒤Map에 추가가 되어 있다면 카운팅을 1 증가 하고없다면 초기화를 해주는데초기화 할 때는, 출력 조건을 위한 정렬을 위해현재 단어와, 카운팅 이렇게 두개의 값을 함께 초기화 해주기.이후 Map의 value를 List로 변환하고, 조건에 따라 정렬해주고 출력하여 해결. import java.io.*;import java.util.*;public class _20920 { public static void main(String[] args) throws IOException { BufferedReader br = new Bu..

알고리즘 2024.11.18

SpringBoot - SLF4J

1. slf4j란?slf4j(Simple Logging Facade for Java)는 다양한 로깅 프레임워크 (예: Logback, Log4j, java.util.logging 등)와 통합될 수 있는 추상화 레이어를 제공하는 라이브러리입니다. 이를 통해 코드에서 로깅 API를 통일시켜 로깅 백엔드를 교체하더라도 코드의 변경 없이 일관되게 사용할 수 있습니다.2. slf4j 의존성 추가하기Spring Boot 프로젝트에서 slf4j를 활용하기 위해 기본적으로 Logback이 포함되어 있습니다. 하지만 프로젝트에서 명시적으로 추가하고자 한다면 pom.xml에 의존성을 추가할 수 있습니다. org.slf4j slf4j-api 1.7.36 ..

SpringBoot 2024.11.17

SpringBoot - 백엔드 개발할 때 알아두면 좋은 기술 스택

1. 프로젝트 관리: Maven 또는 GradleSpring Boot 프로젝트는 Maven과 Gradle 중 하나를 빌드 도구로 선택합니다.Maven: 직관적인 XML 구조와 방대한 커뮤니티 지원으로 안정적인 환경 제공.Gradle: 빌드 속도가 빠르고, 직관적인 DSL을 통해 설정 간소화 가능.선택 팁: 프로젝트 규모와 팀의 경험에 따라 도구를 결정하세요. Maven이 익숙한 팀이라면 Maven을, 최신 트렌드와 속도를 중요시한다면 Gradle을 추천합니다. 2. 데이터베이스: JPA/Hibernate + QueryDSLJPA/Hibernate: 데이터베이스 ORM(Object-Relational Mapping) 도구로, 데이터베이스 작업을 자바 객체와 매핑하여 생산성을 향상시킵니다.QueryDSL: ..

SpringBoot 2024.11.16

[백준, 자바, 2346번] 풍선 터뜨리기

풀이해당 문제를 푸는 방법은 다양하게 있을 듯하다.다만 나는 배열을 새롭게 계속 변형하는 것은 효율적이지 않다고 생각하여인덱스를 사용해서 해결하고자 함.다만 처음에 간과했던 부분은 이미 터뜨린 풍선을 지나갈 때카운팅을 해버려서 계속 오답으로 나왔음.그래서 해당 문제를 이후에 깨닫고 나서는for문을 거쳐서 하나씩 이동하면서 해당 위치가 이미 터뜨린 풍선의 위치라면while문을 거치게 하여 터뜨리지 않은 풍선을 찾으며 해결하고자 하여 해결 import java.util.Scanner;import java.io.*;public class _2346 { public static void main(String[] args) throws IOException { Scanner sc = new Sc..

알고리즘 2024.11.14

[백준, 자바, 13909번] 창문 닫기

풀이해당 문제는 일반적인 방법으로 해결할 수 없다는 걸 알게 됨..이유는 배열을 N개 만큼 만들게 되면 메모리 초과가 발생함.그래서 다른 방법이 없을까 하나씩 찾아보니그냥 어떤 분기에서 변화가 있는지 Set에 넣어보면서 찾다보니계차수열 규칙을 발견// 1 -> 1// 2 -> 1 0// 3 -> 1 0 0// 4 -> 1 0 0 1// 5 -> 1 0 0 1 0// 6 -> 1 0 0 1 0 0// 7 -> 1 0 0 1 0 0 0// 8 -> 1 0 0 1 0 0 0 0// 9 -> 1 0 0 1 0 0 0 0 1// 10 -> 1 0 0 1 0 0 0 0 1 0// 11 -> 1 0 0 1 0 0 0 0 1 0 0// 12 -> 1 0 0 1..

알고리즘 2024.11.13

[백준, 자바, 17103번] 골드바흐 파티션

풀이해당 문제는 짝수의 입력값이 주어졌을 때,두 소수의 합이 입력값이 되는 경우를 카운팅 하는 문제로기존 소수를 구한 것처럼, 에라토스테네스의 체를 활용하여소수를 모두 배열에 넣은 다음2중 for문으로 찾으면서, 합이 큰 경우에 대한 조건 분기를 통해시간 효율을 줄이고자 했지만, 계속해서 시간 초과...그래서 어떤 힌트가 있을지 찾아보니,(인풋값 - 소수) 의 결과값이 소수인가(bool)?를 확인 이라는 문장을 보고허거덩하고 생각한 건, 찾은 소수를 Set에 넣고 좀 더 빠르게 확인하는 방법이 떠올라서아래와 같이 해결할 수 있었음.실패한 코드도 아래에 작성.  // 성공import java.io.*;import java.util.*;public class _17103 { public static v..

알고리즘 2024.11.13

[백준, 자바, 4948번] 베르트랑 공준

풀이해당 문제는 특정 정수보다 크면서 2배한 것 보다 작거나 같은모든 소수를 구하는 문제로서입력값은 0이 나올 때까지 받기에우선은 모든 입력 값을 배열에 담아두면서가장 큰 값을 찾고, 이후에 큰 값의 2배에 해당 하는 배열을 만들어서모든 소수를 에라토스테네스의 체를 활용하여 판별한 뒤이후 배열을 돌려가며 범위에 해당하는 소수를 카운팅하여 해결. import java.io.*;import java.util.*;public class _4948 { public static void main(String[] args) throws IOException { Scanner sc = new Scanner(System.in); BufferedWriter bw = new BufferedW..

알고리즘 2024.11.13

[백준, 자바, 2581번] 소수

풀이이전 소수 찾기 문제를 통해 알게 된에라토스테네스의 체를 활용하여 해결우선 값이 더 큰  N을 기준으로 boolean 배열을 만들고2부터 배수가 되는 인덱스에 값을 true로 변경하고이후 범위를 M과 N 사이에 해당 하는 값을 조건에 따라처리하여 해결 import java.util.Scanner;public class _2581 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int M = sc.nextInt(); int N = sc.nextInt(); boolean[] li = new boolean[N+1]; li[1] = true; ..

알고리즘 2024.11.13

[백준, 자바, 4134번] 다음 소수

풀이해당 문제는 뭔가 좀 아리송했다.이유는 범위가 40억까지라서 int 타입으로는 해결이 불가하다보니처음 고안했던, 가장 큰값을 기준으로 모든 소수를 구한 다음이분 탐색으로 해당 값을 찾는 형식으로 하려고 했는데,계속 시간초과가 발생해서 이유를 뭔가하고 생각해보니중간에 인덱스에 접근하기 위해 int 타입으로 변환한 것 때문에음수로 뭔가 변경되어 발생한 문제가 아닐까하고 생각이 듬... (확실하진 않지만)그래서 그냥 단순히 값을 가져오면 각각의 수에 대한 소수를 판별하고자 함.그리고 int 타입으로 인덱스에 접근 가능하며, 다량의 소수를 판별하고자 할 경우엔에라토스테네스의 체를 생각해내어 해결하면 될 듯하다.2중 for문을 활용해서 i의 배수가 되는 인덱스 값을 모두 지우는 형식으로 빠르게 소수를 구분할 ..

알고리즘 2024.11.12

[백준, 자바, 1735번] 분수 합

풀이해당 문제에선 고민이 되었던 것은분자가 분모보다 값이 큰 것까지 고려해야할 까? 였는데우선 거기까지는 생각하지 말고 해결해보자는 마음으로 해결했음.우선 분모의 최대공약수를 찾고 그에 따라각 분수의 분자를 곱해준 뒤,합한 분수의 분자와 분모에 대한 GCD를 계속 구하면서1이 나올때까지 반복하여 기약분수로 만들어주면서 해결. import java.util.Scanner;public class _1735 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a1 = sc.nextInt(); int a2 = sc.nextInt(); int b1 = sc.ne..

알고리즘 2024.11.12