자바 16

[Python] 파이썬으로 알고리즘 풀기 전 필수 개념

알고리즘을 파이썬으로 준비하려는 개발자들에게 도움이 될 만한 필수 개념을 정리해보려고 합니다.저처럼 주 언어는 Java이지만 코딩 테스트는 Python으로 준비하는 개발자들에게 조금이나마 도움이 되고자중간에 Java 개념과 비슷하거나 다른게 있으면 적어놨으니 같이 참고해주세요만약 자바 개발자가 아니라면 해당 부분은 가볍게 넘어가주시면 됩니다.알고리즘을 풀기 전에 한 번 훑어보면서 개념을 정리하고 같이 코딩 테스트를 준비해봐요 !! 파이팅 !! 1.  기본 문법변수 선언x = 10 # 타입 지정 없음name = "Dengju"파이썬은 변수 선언 시 타입을 명시하지 않아도 된다자바처럼 int, String 등을 사용하지 않는다조건문if x > 5: print("x is greater than 5")elif ..

Python/알고리즘 2025.04.03

[백준/Java] 1193. 분수찾기

https://www.acmicpc.net/problem/1193 🧩  문제 설명무한히 큰 배열에 다음과 같은 분수들이 있을 때, x(입력값)번째 분수를 구하기1/1 -> 1/2 -> 2/1 -> 3/1 -> 2/2 -> ... 과 같은 지그재그 순서로 1번, 2번, 3번, ... 분수라고 지칭함💡 핵심 아이디어대각선 방향으로 분수가 나열되는 규칙을 파악하는 것이 핵심각 대각선에는 분수의 개수가 대각선 번호와 같고,그 대각선에 속하는 분수들의 분자와 분모의 합은 항상 (대각선 번호 + 1)이 된다예를 들어,1번째 대각선: 1/12번째 대각선: 1/2, 2/13번째 대각선: 3/1, 2/2, 1/3여기서 규칙은 대각선의 번호에 따라 탐색 순서가 달라진다는 것✅  알고리즘 흐름1. 대각선 번호 구하기입력..

알고리즘/백준 2025.03.27

[LeetCode/Java] Median of Two Sorted Arrays

https://leetcode.com/problems/median-of-two-sorted-arrays/[문제 설명]두개의 정렬된 배열(nums1, nums2)이 주어졌을 때, 두 배열의 중앙값 찾기단, 시간 복잡도는 O(log(m+n)) * m : nums1의 길이, n : nums2의 길이 [주의사항]중앙값을 찾아야하네? -> 두 배열을 합쳐서 정렬한 뒤 중앙값을 찾자 (XXXXXXX)배열을 합치고 정렬하는 방식의 시간 복잡도는 O((m+n) log(m+n))이기 때문에 문제의 조건과 어긋남 [접근 방법]1. 병합하지 않는다 2. 짧은 배열에 대해 이진 탐색(Binary Search)을 수행한다짧은 배열에 대해 이진 탐색을 하는 이유는 탐색 범위를 줄여서시간 복잡도를 O(log(min(m,n))로 제..

[Programmers/Java] 서버 증설 횟수

레벨2 > 2025년 프로그래머스 코드챌린지 2차 예선 > 서버 증설 횟수사용 언어 : Java 문제 요약이용자가 m명 늘어날 때마다 서버 1대가 추가로 필요이용자가 m명 미만이면 서버가 필요하지 않음이용자가 n×m명 이상 (n+1)×m명 미만이면 n대의 서버가 필요서버는 증설한 후 k시간 동안만 운영모든 게임 이용자를 감당하기 위한 최소 서버 증설 횟수를 찾아야 함변수players : 0시에서 23시까지의 시간대별 게임 이용자의 수를 나타내는 1차원 정수 배열m : 서버 한 대로 감당할 수 있는 최대 이용자의 수k : 서버 한 대가 운영 가능한 시간을 나타내는 정수제한 사항players 길이 : 240 players[i] : i 시 ~ (i + 1) 시 사이의 이용자 수1 1 문제 접근 방향각 시간대별..

[백준/Java] 10986. 나머지 합

🧩  문제 설명정수로 이루어진 수열이 주어졌을 때,부분 구간의 합이 M으로 나누어떨어지는 경우의 수를 구하는 문제!부분 구간은 연속된 구간이어야 함.범위: 1 ≤ N ≤ 1,000,000예시 입력:5 3 1 2 3 1 2 예시 출력:7💡 핵심 아이디어이 문제는 완전탐색(O(N²))으로는 시간 초과가 나기 때문에누적합(Prefix Sum) + 나머지의 개수 세기(counting)를 이용해서 O(N) 으로 해결해야 한다!📌  수학 개념sum[j] - sum[i] 가 M으로 나누어떨어진다⟺ sum[j] % M == sum[i] % M즉, 누적합의 나머지가 같은 두 시점을 고르면,그 사이 구간의 합은 M으로 나누어떨어짐!✅  알고리즘 흐름누적합을 계산하면서 M으로 나눈 나머지를 구함나머지 값의 등장 횟수..

알고리즘/백준 2025.03.23

[Java] 자바 알고리즘 풀 때 int vs long 언제 써야할까?

알고리즘 문제 풀다가 자바에서는 종종 int 를 쓰면 값이 이상하게 나오는 경우가 많다.파이썬은 숫자 범위 제한이 없어서 그냥 막 써도 괜찮은데, 자바는 자료형에 따라 범위가 정해져 있어서 조심해야함✔️ 기본 정수 자료형 범위자료형범위int약 ±21억long약 ±900경✔️ 자료형 선택 기준입력값의 최대 범위 확인하기배열 크기, 원소 값, 반복 횟수 등 다 확인단순히 값이 작아 보여도, 곱하거나 누적될 경우 주의곱셈, 누적합 등 중간 결과가 커지는 경우ex) 1_000_000 * 1_000_000 → 10^12 (int 넘음)이럴 땐 반드시 long 사용지수 연산이 있는 경우문제에서 "행렬 제곱", "A^B" 같이 나오는 경우반복적인 곱셈이 발생해서 수가 커질 수 있음✔️ 자주 하는 실수int a = 1..

Java/알고리즘 2025.03.23

Java에서 CollectionUtils.isEmpty 대신 Optional을 써야할까?

CollectionUtils.isEmpty ? Optional ?개발 중에 이런 상황이 있었다.메서드 파라미터로 List를 받는데, 나는 아래와 같이 null 및 empty 를 체크하고 있었다.if (CollectionUtils.isEmpty(list)) { return;}// 처리 로직그러던 중, 선임 개발자한테 아래와 같은 피드백을 받은 적이 있다."왜 Optional 안 써? Optional 쓰면 더 깔끔하지 않아?" 그래서 궁금해졌다.Optional을 쓰면 정말 더 좋은 걸까?✔️  선임 개발자가 원하는 방향Optional.ofNullable(list) .filter(l -> !l.isEmpty()) .ifPresent(l -> { // 처리 로직..

[LeetCode/Java] 2. Add Two Numbers

https://leetcode.com/problems/add-two-numbers/ 알고리즘 문제를 풀다 보면, 가끔은 나도 모르게 ‘답만 나오면 된다’는 식으로 접근할 때가 있다.그런데 이번 문제를 풀면서 Linked List라는 자료구조의 본질적인 구조와 연결 방식을 다시 생각하게 됐다.단순한 구현 문제처럼 보여도, 기초를 다지는 데 정말 좋은 문제였던 것 같다.그래서 이 문제는 그냥 넘기지 않고, 블로그에 기록해두기로 🤭 [문제 간단 요약]두 개의 역순으로 저장된 Linked List가 있고, 각 노드는 한 자리 숫자를 담고 있다.이걸 실제 정수처럼 더해서, 결과를 똑같이 역순 Linked List로 리턴하기Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)Output: 7 -> 0..

[Spring] 프록시 패턴(Proxy Pattern)

✏️ 한 줄 정리프록시 패턴은 실제 객체 대신 프록시 객체가 요청을 가로채어, 추가적인 기능(트랜잭션, 로깅, 보안 등)을 수행한 후 실제 객체를 호출하는 디자인 패턴 프록시 패턴(Proxy Pattern) 이란 ?프록시 패턴은 객체에 대한 접근을 제어하기 위해 대리자(Proxy) 객체를 두는 디자인 패턴이다.즉, 실제 객체 대신 프록시 객체가 먼저 호출을 가로채고, 필요하면 실제 객체를 호출하는 구조를 가진 패턴 Spring에서 프록시 패턴을 사용하는 경우1. 트랜잭션 관리 (@Transaction)- 트랜잭션을 시작하고, 메서드 실행 후 커밋 또는 롤백 2. AOP (Aspect-Oriented Programming, @Aspect)- 로깅, 성능 모니터링, 보안 검증 등 부가기능 적용- @Befor..

Java/Spring 2025.03.17

[Spring Boot] 의존성 주입(DI)

✏️ 한 줄 정리생성자 주입을 사용하자Spring Boot에서 의존성 주입(Dependency Injection, DI) 방식에는생성자 주입, 필드 주입, 세터 주입이 있다. 1. 생성자 주입 (Constructor Injection) 가장 권장@Componentpublic class ExampleService { private final ExampleRepository exampleRepository; @Autowired // 최신 Spring 버전에서는 생략 가능 public ExampleService(ExampleRepository exampleRepository) { this.exampleRepository = exampleRepository; }} ✅ 불변성 유..

Java/Spring 2025.03.16