본문 바로가기

Java29

스텍 / 큐 : 올바른 괄호 문제 이해주어진 문자열이 올바른 괄호인지 판단하는 문제입니다.올바른 괄호의 예: "()", "(())()", "(()())"올바르지 않은 괄호의 예: "((", "))", ")("접근법 1: 개수와 위치 기반 검증아이디어올바른 괄호의 조건을 다음과 같이 정의했습니다:'(' 개수와 ')' 개수가 같아야 함첫 글자는 '('이어야 함마지막 글자는 ')'이어야 함구현import java.util.*;class Solution { boolean solution(String s) { Stack stack = new Stack(); // 1. 첫 글자와 마지막 글자 확인 if (s.charAt(0) != '(' || s.charAt(s.length() - 1).. 2025. 7. 7.
스텍 / 큐 : 같은 숫자는 싫어 문제 이해배열에서 연속된 같은 숫자를 제거하여 하나만 남기는 문제입니다. 예시:입력: [1,1,3,3,0,1,1]출력: [1,3,0,1] 접근 방법왜 스택을 사용하는가?이 문제의 핵심은 가장 최근에 추가된 원소와 현재 원소를 비교하는 것입니다.스택의 top에 있는 값과 현재 값을 비교 (O(1))연속된 같은 숫자를 효율적으로 제거 가능LIFO(Last In First Out) 특성이 문제와 딱 맞음 알고리즘 설계스택을 생성합니다배열을 순회하며 각 원소에 대해:스택이 비어있거나 top과 현재 원소가 다르면 → push같으면 → 무시 (아무것도 하지 않음)최종 스택을 배열로 변환하여 반환 구현 과정초기 아이디어의 오류처음에는 "같으면 기존 것을 빼고 새로운 것을 추가"하는 방식을 생각했습니다:if (stac.. 2025. 7. 7.
스텍 / 큐 : 기능개발 문제 이해여러 기능을 동시 개발, 각각 진행도와 개발속도가 다름앞선 기능이 완료되어야 뒤 기능도 함께 배포 가능각 배포마다 몇 개의 기능이 배포되는지 구하기핵심 아이디어각 기능을 진행도 계산 함수로 만들어서 큐에 저장하고, 하루씩 시뮬레이션하면서 배포 가능한 기능들을 찾는다.접근 방법함수 생성: progress + speed * day 형태의 함수를 각 기능마다 생성큐 활용: 순서대로 처리하기 위해 Queue 사용시뮬레이션: 매일 front()로 체크하여 100 이상이면 pop()배포 카운트: 연속으로 완성된 기능들을 같은 날 배포코드import java.util.*;import java.util.function.Function;class Solution { public int[] solution(.. 2025. 7. 3.
스텍 / 큐 : 프로세스 문제 이해여러 문서들이 프린터 대기열에 있음각 문서마다 중요도가 있다 (숫자가 클수록 중요)프린터 규칙: 현재 문서보다 중요한 문서가 뒤에 있으면, 현재 문서를 맨 뒤로 보내고 중요한 문서를 먼저 인쇄특정 문서가 몇 번째로 인쇄되는지 구하기핵심 아이디어각 문서에 **[중요도, 고유번호]**를 저장하여 큐에서 순서 추적하고, 프린터의 실제 동작을 시뮬레이션한다.접근 방법문서 추적: [중요도, 원래 인덱스] 형태로 큐에 저장큐 활용: FIFO 특성으로 프린터 대기열 구현우선순위 체크: 현재 문서보다 중요한 문서가 뒤에 있는지 확인시뮬레이션: 인쇄 또는 대기열 맨 뒤로 이동 결정코드import java.util.*;class Solution { public int solution(int[] priorit.. 2025. 7. 3.
스텍 / 큐 : 다리를 지나는 트럭 문제 이해트럭 여러 대가 일차선 다리를 건너려고 한다. 다리에는 무게 제한과 길이 제한이 있어서, 모든 트럭이 안전하게 건너는 데 걸리는 최소 시간을 구해야 한다.문제 조건bridge_length: 다리 길이 (트럭이 다리를 건드는 데 걸리는 시간)weight: 다리가 견딜 수 있는 최대 무게truck_weights: 트럭들의 무게 배열 (순서대로 출발)핵심 규칙트럭들은 주어진 순서대로만 출발 가능 (새치기 불가)모든 트럭의 속도는 동일 (1초에 1칸)다리 위 트럭들의 총 무게 ≤ weight 조건 유지트럭은 다리에 동시에 여러 대 있을 수 있음 첫 번째 버전: 클래스 + 큐 2개 사용class Truck { int weight; int exitTime; Truck(int weig.. 2025. 7. 3.
스텍 / 큐 : 주식가격 문제 설명문제 개요주식의 가격이 초 단위로 기록된 배열이 주어질 때, 각 시점에서 "가격이 떨어지지 않은 기간"이 얼마나 되는지 구하는 문제입니다. 핵심 규칙현재 시점부터 몇 초 후에 가격이 떨어지는가?가격이 같거나 올라가는 것은 "떨어지지 않음"으로 간주끝까지 떨어지지 않으면 남은 기간 전체를 반환 예시prices = [1, 2, 3, 2, 3]결과 = [4, 3, 1, 1, 0] 해석:인덱스 0 (가격=1): 끝까지 떨어지지 않음 → 4초인덱스 1 (가격=2): 끝까지 떨어지지 않음 → 3초인덱스 2 (가격=3): 인덱스 3에서 2로 떨어짐 → 1초인덱스 3 (가격=2): 끝까지 떨어지지 않음 → 1초인덱스 4 (가격=3): 마지막 → 0초문제 이해와 접근 방법핵심 아이디어"역방향 사고": 각 시점에.. 2025. 7. 3.
스택 / 큐 스택(Stack)개념LIFO (Last In, First Out) - 마지막에 들어간 것이 먼저 나옴책 쌓기와 같은 구조 - 위에서 넣고, 위에서 빼기주요 연산push(): 맨 위에 요소 추가pop(): 맨 위 요소 제거하고 반환peek() / top(): 맨 위 요소 확인 (제거하지 않음)isEmpty(): 스택이 비어있는지 확인사용 예시되돌리기(Undo) 기능괄호 검사 (올바른 괄호 쌍 확인)함수 호출 관리계산기 (후위 표기법)자바 코드Stack stack = new Stack();stack.push(1); // [1]stack.push(2); // [1, 2]int top = stack.pop(); // 2 반환, [1]int peek = stack.peek(); // 1 .. 2025. 7. 2.
해시 HashMap 기본 문법 정리:// 1. 선언과 생성Map map = new HashMap();// 2. 데이터 추가/수정map.put("key", 10); // 키-값 저장map.put("key", 20); // 같은 키면 값 덮어쓰기// 3. 데이터 조회map.get("key"); // 값 반환 (없으면 null)map.getOrDefault("key", 0); // 값 반환 (없으면 기본값 0)// 4. 존재 확인map.containsKey("key"); // 키 존재 여부 (true/false)map.containsValue(10); // 값 존재 여부 (true/false)// 5. 크기와 비어있는지 확인map.size.. 2025. 6. 23.
배열 1. 문자열을 정수로 바꾸는 방법class Solution { public int solution(String s) { return Integer.parseInt(s); }}2. 정수의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴하는 법class Solution { public long solution(long n) { char[] arr = String.valueOf(n).toCharArray(); java.util.Arrays.sort(arr); return Long.parseLong(new StringBuilder(new String(arr)).reverse().toString()); }} 3. 배열중에 특정 문.. 2025. 4. 30.
트러블슈팅2 - 코드 재사용성을 높이고 더 정확한 표현으로 수정 키오스크를 처음부터 새로 만들어봤습니다.제목에서 알 수 있듯이 코드 재사용성을 높이고 코드를 더 정확하고 안전하게 다루는것에 초점을 두어 구현해봤습니다. 처음 접해보는 내용들도 있어서 코드블록과 함께 코드 설명을 해보겠습니다.1. 불변화제가 이 개념을 접하게 된 이유는 저는 지금까지 데이터를 캡슐화시키기 위해서 접근제어자를 설정해주었습니다. 하지만 사실 외부에서 게터로 가져와서 add나 remove 기능을 사용할 수 있으니까 이거로는 캡슐화를 하지 못한다고 느꼈습니다. 왜냐하면 지금까지 저는 단순한 게터형식의 메서드만 만들어줬기때문이죠. 하지만, 제가 여기서 알려드릴 '불변화'라는 개념은 정말 제가 원했던 캡슐화를 시켜줄 수 있는 개념입니다. public Map getCart() { r.. 2025. 4. 29.
트러블 슈팅 - 키오스크 구현 이번 개인 프로젝트는 아래의 목표를 스스로 세워 진행했습니다.기능 별로 최대한 클래스를 나누어 구현코드의 재사용성을 최대한 고려1. 기능 별로 최대한 클래스를 나누고 나니 기능은 제대로 만들었지만, 코드 실행시 break나 코드 위치에 따라서 기능이 제대로 실행이 안되거나 순서가 꼬여버리는 상황이 많았습니다. 이를 해결하기 위해 10개가 넘는 클래스를 하나하나 찾아다니면서 결국 완성은 했지만, 아직 이 부분은 제가 미숙하다고 느껴서 다시 한 번 처음부터 만들어보면서 이 문제를 해결하기 위한 능력을 키우려고 합니다. 2. 코드의 재사용성을 최대한 고려하며 느낀 점은 처음에 리스트를 선언할 때가 가장 중요하다고 느꼈습니다. 리스트를 어떠한 형식으로 선언해주느냐에 따라 삭제나 추가 기능의 코드가 비약적으로 짧.. 2025. 4. 28.
트러블 슈팅 - 기능 별로 클래스를 나누어보자 3단계 계산기를 처음부터 다시 만들어보았습니다.어떤 순서대로 구현을 했는지에 초점을 맞추어 기록을 진행해보겠습니다. 우선, 핵심 기능들이 무엇이 있는지부터 파악을 해보았어요.실수와 사칙연산자를 입력받는 기능입력받은 데이터들을 활용한 연산 기능연산 결과들을 저장해주는 리스트 생성저장된 리스트들의 값을 조회해주는 기능가장 오래된 결과값을 삭제해주는 기능종료, 조회, 삭제 등 커맨드를 입력받고 실행해주는 기능예외처리 해주는 기능구현 순서를 생각해보면, 1. 실수와 사칙연산자들을 입력을 받는 클래스를 생성해준다.2. 입력받은 사칙연산자들을 enum 타입으로 관리를 해준다. (여기서 0으로 나누려고 했을 때와 올바른 사칙연산기호를 입력하지 않았을 때, 총 2가지의 예외를 발생시켜준다. 예외처리는 추후 단계에서 진.. 2025. 4. 23.