[프로그래머스] 큰 수 만들기 (그리디)
·
Algorithm/Coding Test Records
문제 소개큰 수 만들기 - 프로그래머스 문제를 정리합니다.이 문제는 숫자에서 k개의 수를 제거해 만들 수 있는 가장 큰 수를 구하는 문제입니다.문제 링크: 큰 수 만들기 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:앞자리부터 순차적으로 숫자를 보며 더 큰 수가 나오면 앞 수를 제거제거 횟수 k를 다 쓸 때까지만 위 과정을 반복제거된 결과를 스택에 저장하고, 필요한 길이만큼 결과 추출해결 과정 및 코드핵심 아이디어앞에서부터 숫자를 보며, 스택 top 값이 현재 값보다 작고, 제거 횟수 k가 남아있다면 top을 제거이 과정을 반복하면서 스택에 가능한 큰 수를 남김다 끝난 후에도 k가 남아 있다면, 가장 끝의 값들을 무시해야 하므로 deque.size() - k > 0만큼만 결과에..
[프로그래머스] 체육복 (그리디)
·
Algorithm/Coding Test Records
문제 소개오늘 풀었던 체육복 - 프로그래머스 문제를 정리합니다.이 문제는 체육복이 없는 학생에게 여벌 체육복을 빌려줘 가능한 최대 학생 수를 구하는 그리디 유형 문제입니다. 핵심은 "양쪽 학생만 빌려줄 수 있음"과 "여벌이 있지만 도난당한 경우 빌려줄 수 없음" 조건을 처리하는 데 있습니다.문제 링크: 체육복 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:학생 상태를 배열로 관리 (기본값 0, 도난 -1, 여벌 +1)여벌 + 도난 중복 학생은 0으로 정리왼쪽 또는 오른쪽 학생에게만 빌려주는 탐욕적 할당 방식(그리디)현재 시점에서 가장 가까운(왼쪽부터) 학생에게 먼저 빌려주는 방식이 전체 학생 수를 최대로 만드는 결정 끝까지 체육복 못 받은 학생 수만큼 전체 인원에서 차감해결 과..
[백준] 괄호 추가하기 (DFS)
·
Algorithm/Coding Test Records
문제 소개괄호 추가하기 - 백준 16637번 문제를 정리합니다.이 문제는 연산자 우선순위가 없는 수식에서 괄호를 적절히 추가해 최댓값을 만드는 완전탐색 유형입니다.문제의 핵심은 괄호는 연산자 하나만 포함해야 하며, 중첩 불가라는 제약을 고려해 가능한 모든 연산 순서를 탐색하는 데 있습니다.문제 링크: 괄호 추가하기 - 백준 16637번문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:피연산자와 연산자 분리홀수 위치는 숫자, 짝수 위치는 연산자로 나뉘므로 배열로 분리DFS를 이용한 모든 경우의 수 탐색현재 연산을 실행하는 경우뒤에 괄호를 묶어서 먼저 연산한 값을 현재와 연산하는 경우괄호는 중첩 불가다음 연산을 괄호로 묶는 경우는 한 칸을 건너뛴 인덱스로 이동해결 과정 및 코드핵심 아이디어수식을 좌..
Map<String, Integer> dp 는 시간초과가 나는 이유 : 프로그래머스 - 사칙연산
·
Code Odyssey
[프로그래머스] 사칙연산 (분할정복 + DP) 풀이 [프로그래머스] 사칙연산 (분할 정복 + DP)문제 소개풀었던 프로그래머스 - 사칙연산 문제를 정리합니다.이 문제는 사칙 연산(+, -) 순서에 따라 결과가 달라지는 연산식에서 최댓값을 구하는 문제입니다.문제의 핵심은 괄호를 어떻게 치orion-log.tistory.com 이전 풀었던 DP 문제에서 아래처럼 Map 코드를 작성하면 시간 초과가 난다.import java.util.*;class Solution { static Map maxMemo, minMemo; static String [] gArr; public int solution(String arr[]) { maxMemo = new HashMap(); m..
[프로그래머스] 사칙연산 (분할 정복 + DP)
·
Algorithm/Coding Test Records
문제 소개풀었던 프로그래머스 - 사칙연산 문제를 정리합니다.이 문제는 사칙 연산(+, -) 순서에 따라 결과가 달라지는 연산식에서 최댓값을 구하는 문제입니다.문제의 핵심은 괄호를 어떻게 치느냐에 따라 결과가 달라지기에 단순히 왼쪽부터 계산하는 게 아니라 모든 가능한 괄호 조합 (= 연산 순서) 을 탐색해야 합니다.문제 링크: 사칙연산 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:모든 가능한 괄호 순서대로 계산하고 최댓값을 저장 각 구간을 쪼개서 괄호를 다르게 결정 = 분할 정복으로 연산 결과 저장최댓값을 구하려면 한 연산자를기준으로 좌우 결과의 최소/최대가 저장되어야함+ 연산자 : 최댓값 + 최댓값 = 최대- 연산자 : 최댓값 - 최솟값 = 최대각 구간의 최댓값과 최솟값을 ..
왜 Java는 length, length(), size()를 따로 써야 할까? – 통일 안 된 이유
·
Code Odyssey
🤔 Java에는 "길이"를 구하는 세 가지 방법대상길이 구하는 법예시배열 (int[])length (속성)arr.length문자열 (String)length() (메서드)str.length()컬렉션 (List, Set, Map)size() (메서드)list.size() 이렇게 서로 다르게 써야 한다는 것, 초보자 입장에선 헷갈립니다. 저도 처음엔 arr.length()를 쓰고 에러를 봤던 기억이 있습니다.그런데 왜 이렇게 설계했을까? 왜 length() 하나로 통일하지 않았을까요? 🔍 자료형별로 왜 다르게 설계되었는가?1. 배열: length는 속성 (field)Java의 배열은 언어 차원에서 제공되는 primitive-level 구조입니다.즉 클래스가 아니라, 같은 타입의 요소들을 연속된 메모리에 ..
📌 Java에서 배열 정렬하기 - Arrays.sort()
·
Code Odyssey
Java에서 배열을 정렬할 때 자주 사용되는 Arrays.sort()는 기본 자료형 배열과 객체 배열을 정렬할 수 있는 강력한 기능을 제공합니다. 다차원 배열 정렬이나 특정 기준을 기반으로 정렬할 때 Comparator를 활용하는 방법 등 이전에 정리한거 다시 업로드합니다.1️⃣ 기본적인 오름차순, 내림차순 정렬✅ 오름차순 정렬 (기본)Arrays.sort()를 사용하면 숫자 배열은 기본적으로 오름차순으로 정렬됩니다.int[] arr = {5, 2, 9, 1, 5, 6};Arrays.sort(arr);System.out.println(Arrays.toString(arr)); // [1, 2, 5, 5, 6, 9]✅ 내림차순 정렬내림차순 정렬을 하려면 Integer(래퍼 클래스)를 사용하여 Comparat..
[프로그래머스] 전화번호 목록 (Hash)
·
Algorithm/Coding Test Records
문제 소개오늘 풀었던 프로그래머스 - 전화번호 목록 문제를 정리합니다.이 문제는 주어진 전화번호 목록 중 어떤 번호가 다른 번호의 접두어(prefix)인 경우가 있는지를 확인하는 문제입니다.접두어 관계가 존재하면 false, 존재하지 않으면 true를 반환합니다.문제 링크: 전화번호 목록 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:전화번호를 사전 순 정렬하면, 접두어인 경우는 반드시 인접한 위치에 나옴따라서 인접한 두 번호만 비교해서앞 번호가 뒷 번호의 접두어인지 확인하면 충분해결 과정 및 코드핵심 아이디어정렬 후 → phone_book[i+1].startsWith(phone_book[i]) 만 확인startsWith()는 문자열 접두어 비교를 빠르게 수행첫 접두어 발견 즉..
[프로그래머스] 폰켓몬 (Hash)
·
Algorithm/Coding Test Records
문제 소개오늘 풀었던 프로그래머스 - 폰켓몬 문제를 정리합니다.이 문제는 총 N마리의 폰켓몬 중에서 N/2마리만 선택할 수 있을 때,가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아 그때의 종류 개수의 최댓값을 구하는 문제입니다.문제 링크: 폰켓몬 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:선택할 수 있는 폰켓몬 수는 고정 = N / 2폰켓몬의 종류 수가 이보다 많다면, 최대 N / 2 종류만 선택 가능폰켓몬의 종류 수가 이보다 적다면, 그 종류 수만큼만 선택 가능따라서 정답은 min(전체 종류 수, N / 2)해결 과정 및 코드핵심 아이디어HashSet을 사용하면 중복 없이 폰켓몬의 종류 수 계산 가능이후, nums.length / 2와 set.size() 중 작은 값이 최..
[프로그래머스] 이중우선순위큐 (Heap)
·
Algorithm/Coding Test Records
문제 소개오늘 풀었던 프로그래머스 - 이중 우선순위 큐 문제를 정리합니다.이 문제는 문자열로 주어진 명령어 리스트를 따라숫자를 삽입 / 최댓값 또는 최솟값을 하나씩 삭제 하는 연산을 순차적으로 처리한 후,큐가 비어 있으면 [0,0], 아니면 [최댓값, 최솟값]을 반환하는 문제입니다.문제 링크: 이중우선순위큐 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:중복 값도 관리할 수 있어야 하므로 값과 개수를 함께 저장해야 함이를 위해 TreeMap 을 사용자동 정렬: firstKey(), lastKey()로 최솟값/최댓값에 O(log N)으로 접근 가능중복 처리: value에 등장 횟수 저장연산을 순서대로 처리하면서 적절히 삽입/삭제 처리해결 과정 및 코드핵심 아이디어 TreeMap은..