자바 105

프로그래머스: 큰 수 만들기

문제주어진 숫자 문자열 number에서 k개의 숫자를 제거해 만들 수 있는 가장 큰 수를 구하는 문제입니다.예를 들어 number = "1924"이고 k = 2라면, 만들 수 있는 가장 큰 수는 "94"입니다. 문제 해결탐욕적(Greedy) 접근이 필요한 문제입니다.앞자리부터 가능한 한 큰 숫자를 남겨야 최종적으로 큰 수가 됩니다.이를 위해 Stack 자료구조를 활용하여 다음과 같은 조건으로 문자를 저장합니다:Stack이 비어있지 않고,k > 0이며,현재 스택의 top 숫자가 새로 들어올 숫자보다 작다면,스택의 top을 제거(pop)하여 더 큰 수가 앞으로 오도록 만듭니다.이 과정을 가능한 한 반복해야 하므로 while 루프로 구현합니다.Java 코드import java.util.*;class Solut..

Algorithm 2025.04.21

프로그래머스: 조이스틱

문제이름을 만들기 위해 조이스틱을 조작하는 최소 횟수를 구하는 문제입니다.조이스틱은 ▲(위), ▼(아래), ◀(왼쪽), ▶(오른쪽)으로 움직입니다.▲: A부터 Z로, ▼: Z부터 A로 변경목표 문자열은 알파벳 대문자로 이루어져 있고, 처음에는 모든 문자가 A로 되어 있음커서를 좌우로 이동하며 알파벳을 변경해 원하는 이름을 만들어야 함핵심위/아래 조작 (▲▼)각 문자마다 A에서 목표 문자로 바꾸기 위해 최소 몇 번 이동해야 하는지를 계산Math.min(name.charAt(i) - 'A', 'Z' - name.charAt(i) + 1) 를 사용해서 위로 가는 경우와 아래로 가는 경우 중 더 작은 값 사용좌/우 조작 (◀▶)단순히 오른쪽으로만 이동하면 length - 1번이 필요하지만,중간에 A가 연속되는 ..

Algorithm 2025.04.21

프로그래머스: 이중우선순위큐

문제 설명이중 우선순위 큐는 다음과 같은 연산을 수행할 수 있는 자료구조입니다: 명령어 설명 I 숫자큐에 숫자를 삽입D 1큐에서 최댓값 삭제D -1큐에서 최솟값 삭제큐가 비어있을 때 삭제 연산이 들어오면 무시합니다.최댓값/최솟값이 여러 개여도 한 개만 삭제합니다. 목표모든 연산을 처리한 후,큐가 비어있다면 [0, 0]비어있지 않다면 [최댓값, 최솟값]을 반환합니다. 풀이 전략Java의 PriorityQueue는 기본적으로 **오름차순 정렬(최솟값 우선)**을 합니다.최댓값을 빠르게 제거하기 위해서는 내림차순 우선순위 큐가 추가로 필요합니다.따라서 우리는 다음과 같이 두 개의 우선순위 큐를 사용합니다:pq: 최소 힙 (PriorityQueue)reverse: 최대 힙 (PriorityQueue(Colle..

Algorithm 2025.04.21

프로그래머스: 디스크 컨트롤러

문제디스크 컨트롤러 문제는 운영체제의 스케줄링 알고리즘 중 하나인 Shortest Job First (SJF) 를 활용한 시뮬레이션 문제입니다.하드디스크는 동시에 하나의 작업만 처리할 수 있고, 작업은 아래의 우선순위로 처리되어야 합니다:소요 시간이 짧은 작업요청 시각이 빠른 작업작업 번호(작업 순서)가 작은 작업우리는 이 우선순위를 고려해 주어진 작업들의 평균 소요시간을 최소화해야 합니다. 해결시간 순으로 정렬된 작업들을 관리하면서,특정 시간 시점까지 도착한 작업 중 소요시간이 가장 짧은 작업을 선택우선순위 큐(PriorityQueue)를 활용하여 이 과정을 효율적으로 수행 자바코드import java.util.*;class Solution { public int solution(int[][]..

Algorithm 2025.04.21

프로그래머스: 타겟 넘버

✅ BFS 풀이 방식각 숫자마다 +와 - 두 가지 선택지를 고려한다.이를 트리 형태로 보면, 각 깊이에 해당하는 인덱스를 기준으로 다음 숫자를 더하거나 뺀 결과를 큐에 담아가며 모든 경우를 탐색한다.최종적으로 인덱스가 끝났을 때(index == numbers.length) 합이 target과 같으면 answer++. 풀이코드import java.util.*;class Solution { public int solution(int[] numbers, int target) { int answer = 0; Queue queue = new LinkedList(); queue.offer(new int[] {0, 0}); // index, sum while (..

Algorithm 2025.04.17

XSS(Cross-Site Scripting)란?

웹 애플리케이션 개발자라면 꼭 알아야 하는 보안 취약점 중 하나가 바로 **XSS(Cross-Site Scripting)**입니다. 이 취약점은 사용자 입력을 제대로 검증하지 않아 악성 스크립트가 삽입되고 실행되는 문제로, 사용자 정보 탈취부터 시스템 장악까지 매우 치명적인 보안 위협이 될 수 있습니다.이 글에서는 XSS가 무엇인지, 어떤 방식으로 공격이 이뤄지는지, 그리고 어떻게 방어할 수 있는지를 예제와 함께 자세히 설명하겠습니다.✅ XSS란 무엇인가?**XSS (Cross-Site Scripting)**는 공격자가 웹 페이지에 **악의적인 스크립트(JavaScript)**를 삽입하고, 해당 스크립트가 다른 사용자의 브라우저에서 실행되도록 유도하는 공격입니다.주로 다음과 같은 상황에서 발생합니다:사용..

Web 2025.04.17

프로그래머스: 주식가격

[ 문제 접근 ]이 문제는 스택(Stack) 을 활용해 효율적으로 해결할 수 있습니다.앞에서부터 가격을 순회하면서 현재 가격보다 높은 가격이 나올 때까지 기다립니다.만약 지금 가격보다 낮은 가격이 나오면, 이전 인덱스부터 현재까지의 시간 차이를 계산합니다.끝까지 가격이 떨어지지 않은 경우, 전체 길이에서 현재 인덱스를 빼줍니다.[ 풀이 코드 ]import java.util.*;class Solution { public int[] solution(int[] prices) { int length = prices.length; int[] answer = new int[length]; Stack stack = new Stack(); for (..

Algorithm 2025.04.17

프로그래머스: 트럭 다리 통과 시뮬레이션

문제 설명트럭 여러 대가 일차선 다리를 정해진 순서대로 건너야 합니다.조건은 다음과 같습니다:다리는 최대 bridge_length대의 트럭만 동시에 올라갈 수 있습니다.다리가 견딜 수 있는 총 무게는 weight입니다.트럭은 1초에 한 칸씩만 이동합니다.완전히 다리에 올라가지 않은 트럭의 무게는 고려하지 않습니다.모든 트럭이 다리를 건널 때까지 최소 몇 초가 걸리는지를 구하는 것이 목표입니다. 문제 해결 전략매초마다 다리 위의 트럭 상태를 갱신한다.트럭은 1초에 한 칸씩 전진하고, 다리에서 빠진 트럭의 무게만큼 다시 공간이 생긴다.조건이 되면 대기 중인 트럭을 다리에 올린다.이를 Queue 자료구조를 활용하여 구현한다.코드 (Java)import java.util.*;class Solution { ..

Algorithm 2025.04.14

프로그래머스: 프로세스

[ 문제 요약 ]프로세스는 큐(Queue)에 순서대로 들어갑니다.가장 앞의 프로세스를 꺼내고, 뒤에 더 높은 우선순위의 프로세스가 있다면 다시 큐 뒤에 넣습니다.그렇지 않다면 해당 프로세스를 실행합니다 (종료 처리).내가 찾고자 하는 위치(location)의 프로세스가 몇 번째로 실행되는지를 구합니다.접근 방식Queue에 int[]{인덱스, 우선순위} 형식으로 삽입합니다.매 반복마다 큐에서 프로세스를 하나 꺼냅니다.나머지 큐를 순회하여 더 높은 우선순위가 존재하는지 확인합니다.있다면 다시 큐에 삽입, 없다면 실행 처리 후 count++.실행된 프로세스가 location과 같으면 종료.코드 구현import java.util.*;class Solution { public int solution(int[..

Algorithm 2025.04.14

JPA, ORM, HIBERNATE이란?

ORM(Object-Relational Mapping)이란?ORM은 객체(Object)와 관계형 데이터베이스(Relational Database)의 데이터를 자동으로 매핑해주는 기술이다.즉, 개발자는 SQL문을 직접 작성하지 않고도 자바 클래스만으로 DB 데이터에 접근하고 조작할 수 있다.// Java 객체public class User { private Long id; private String name; private String email;}이 User 클래스는 ORM에 의해 USER 테이블과 자동으로 매핑된다. Hibernate란?Hibernate는 가장 널리 사용되는 ORM 프레임워크 중 하나로, Java 진영에서 객체와 테이블을 매핑하는 일을 담당한다.주요 특징SQL을 직접 작..

Back_End/JPA 2025.04.11