[백준] 멀티탭 스케줄링 (그리디)
·
Algorithm/Coding Test Records
문제 소개멀티탭 스케줄링 - 백준 1700번 문제를 정리합니다.이 문제는 멀티탭에 꽂을 수 있는 전기용품 수가 제한된 상황에서, 최소 횟수로 플러그를 뽑는 그리디 스케줄링 문제입니다.핵심은 "멀티탭에 꽂혀 있는 전기용품 중 어떤 걸 뽑을지"를 먼저 고민해야합니다.문제 링크: 멀티탭 스케줄링 - 백준 1700번문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:전기용품이 이미 꽂혀 있다면 그대로 사용빈 자리가 있다면 꽂음빈 자리가 없다면, 이후 사용 계획을 참고해 가장 늦게 사용하거나 더 이상 사용하지 않을 전기용품을 뽑음위 과정을 반복하며 플러그 교체 횟수를 계산해결 과정 및 코드핵심 아이디어현재 꽂혀 있는 전기용품들을 used 배열로 관리매 순간 꽂으려는 전기용품이 이미 사용 중이면 패스아니라면..
[백준] 빗물 (투 포인터)
·
Algorithm/Coding Test Records
문제 소개빗물 - 백준 14719번 문제를 정리합니다.이 문제는 벽 사이의 공간에 고이는 빗물의 양을 구하는 문제입니다.핵심은 왼쪽과 오른쪽에서의 최대 높이를 기준으로 물이 고일 수 있는 높이를 판단하는 데 있습니다.문제 링크: 빗물 - 백준 14719번문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:왼쪽과 오른쪽에서 투포인터를 사용해 중앙으로 좁혀오며 탐색각 칸에서의 최대 빗물 높이는 좌우 벽 중 더 낮은 높이현재 칸의 높이와 비교하여 고일 수 있는 빗물 양을 누적해결 과정 및 코드핵심 아이디어양쪽 끝에서 출발하는 left, right 포인터 사용→ leftMax, rightMax로 각 방향에서의 최대 벽 높이를 저장leftMax 이면 왼쪽 기준으로 고일 수 있는 물을 계산→ 현재 칸이 le..
[백준] 짜고 치는 가위바위보(Small) (백트래킹)
·
Algorithm/Coding Test Records
문제 소개짜고 치는 가위바위보 (Small) - 백준 문제를 정리합니다.이 문제는 문자열의 부분 수열을 골라 lighter의 장난으로 인한 "관중 분노 조건"을 회피할 수 있는 경우의 수를 구하는 문제입니다.문제 링크: 짜고 치는 가위바위보 (Small) - 백준 30518번문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:smallant가 낼 수 있는 문자열의 모든 부분 수열을 백트래킹으로 탐색각 선택한 수열마다 lighter의 다음 수는 smallant의 이전 수를 그대로 따라간다는 규칙을 적용lighter가 이긴 직후 라운드에서 비기면 안 됨→ 이 조건을 만족하지 않도록 가지치기 해결 과정 및 코드핵심 아이디어백트래킹으로 smallant가 낼 문자열의 부분 수열을 모두 탐색각 라운드마다 l..
[백준] 가르침 (비트마스킹)
·
Algorithm/Coding Test Records
문제 소개가르침 - 백준 1062번 문제를 정리합니다.이 문제는 최대 K개의 글자를 가르칠 수 있을 때, 읽을 수 있는 단어의 최대 개수를 구하는 비트마스킹 + 백트래킹 문제입니다.핵심은 반드시 포함해야 하는 5글자(a, n, t, i, c)를 고려한 조합 탐색과,비트 연산으로 빠르게 단어 읽기 여부를 판별하는 방식에 있습니다.문제 링크: 가르침 - 백준 1062번문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:모든 단어는 "anta"로 시작하고 "tica"로 끝남 → 항상 필요한 5글자(a, n, t, i, c)는 미리 배운 상태에서 시작단어의 나머지 글자를 비트마스킹으로 저장K → 바로 0 출력K == 26이면 모든 글자를 배운 것과 같음 → 모든 단어 읽을 수 있음그렇지 않다면, 조합으..
[백준] 4와 7 (구현+수학)
·
Algorithm/Coding Test Records
문제 소개4와 7 - 백준 2877번 문제를 정리합니다.이 문제는 4와 7로만 이루어진 수 중 K번째 작은 수를 출력하는 이진 + 수학적 규칙 문제입니다.문제 링크: 4와 7 - 백준 2877번문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:4와 7로만 이루어진 수는 2진수처럼 구성 → 자리수 N이면 2ⁿ개의 수 생성 가능자리수마다 몇 개의 수가 있는지 누적합을 구해 K번째 수의 자리수를 결정해당 자리수 내에서의 인덱스를 2진수로 변환 후 → '0'을 4, '1'을 7로 치환해결 과정 및 코드핵심 아이디어4, 7, 44, 47, 74, 77 … 이런 식으로 4와 7로만 이루어진 모든 수는 자리수가 증가할수록 2진수처럼 구성됨4, 7 / 44, 47, 74, 77 / 444, 447, 474, ..
[프로그래머스] 단속 카메라 (그리디)
·
Algorithm/Coding Test Records
문제 소개 단속 카메라 - 프로그래머스 문제를 정리합니다.이 문제는 모든 차량이 최소 한 번 단속 카메라를 지나도록 하기 위해 카메라를 최소 몇 대 설치해야 하는지 구하는 최소 지점 커버 문제입니다.핵심은 차량 경로의 겹침 구간을 고려해 가장 빠른 진출 지점 위주로 카메라를 설치하는 전략입니다.문제 링크: 단속 카메라 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:차량의 진출 지점을 기준으로 정렬이미 설치된 카메라 위치로 차량이 단속되는지 확인단속되지 않는 경우, 해당 차량의 진출 지점에 새로운 카메라 설치진출 입구에 설치하면 지나가는/진출하는 차량 등 최대한 많은 차량 커버 가능 → 탐욕적 선택 (Greedy)해결 과정 및 코드핵심 아이디어차량 경로를 진출 지점 기준으로 오름..
[프로그래머스] 섬 연결하기 (Kruskal)
·
Algorithm/Coding Test Records
문제 소개섬 연결하기 - 프로그래머스 문제를 정리합니다.이 문제는 n개의 섬을 최소 비용으로 모두 연결하는 최소 신장 트리(MST) 문제입니다.핵심은 모든 섬이 서로 통행 가능하게 만들되, 총 비용이 최소가 되도록 연결하는 것입니다.문제 링크: 섬 연결하기 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:전체 통행할 수 있는 다리의 최소 비용을 구해야함 + 각 다리(간선) 비용이 주어짐=> 최소 신장 트리(MST) / 크루스칼 알고리즘 사용간선들을 가중치 기준으로 정렬한 뒤, 유니온-파인드로 사이클 방지간선을 하나씩 선택하며 MST 구성, n-1개의 간선 선택 시 종료해결 과정 및 코드핵심 아이디어Edge 클래스에 간선 정보를 담고, 비용 기준으로 정렬Union-Find 자료구조..
[프로그래머스] 조이스틱 (그리디)
·
Algorithm/Coding Test Records
문제 소개 오늘 풀었던 조이스틱 - 프로그래머스 문제를 정리합니다.이 문제는 이름을 만들기 위해 조이스틱을 최소 몇 번 조작해야 하는지를 계산하는 문제입니다.문제의 핵심은 "상하 이동(문자 변경)"과 "좌우 이동(커서 이동)"을 분리하여 최소 횟수를 각각 구하는 데 있습니다.문제 링크: 조이스틱 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:알파벳을 변경하는 데 필요한 최소 상하 이동 횟수 계산커서를 이동할 때 A가 연속되는 구간을 고려하여 최소 좌우 이동 경로 탐색완성까지 필요한 총 이동 횟수 = 상하 + 좌우 합산해결 과정 및 코드핵심 아이디어각 알파벳은 'A'를 기준으로 ▲ 또는 ▼ 중 더 적은 횟수만큼 조작→ 예: B는 ▲ 1번, Z는 ▼ 1번이 최적좌우 이동은 단순히 ..
[프로그래머스] 구명보트 (투 포인터)
·
Algorithm/Coding Test Records
문제 소개구명보트 - 프로그래머스 문제를 정리합니다.이 문제는 무게 제한이 있는 보트에 사람들을 최소한의 횟수로 태우는 그리디 알고리즘 문제입니다. 핵심은 가벼운 사람과 무거운 사람을 짝지어 최대한 효율적으로 태우는 데 있습니다.문제 링크: 구명보트 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:몸무게 배열을 오름차순 정렬가장 무거운 사람부터 보트에 태우되, 가장 가벼운 사람과 같이 탈 수 있는지 확인두 사람 무게 합이 limit 이하이면 같이 태움, 아니면 무거운 사람만 따로 보냄양쪽 포인터를 좁혀가며 탐색, 보트를 탈 때마다 카운트 증가해결 과정 및 코드핵심 아이디어무거운 사람부터 순서대로 보트에 태우되, 가벼운 사람과 함께 탈 수 있는 경우를 우선 고려정렬된 배열에서 양쪽..
[프로그래머스] 큰 수 만들기 (그리디)
·
Algorithm/Coding Test Records
문제 소개큰 수 만들기 - 프로그래머스 문제를 다른 방식으로 정리합니다.이 문제는 숫자에서 k개의 수를 제거해 만들 수 있는 가장 큰 수를 구하는 문제입니다.이전 포스팅에서는 Deque와 StringBuilder를 사용하는 풀이를 정리했지만,이번에는 추가 자료구조 없이 char[]만으로 구현한 방식으로 정리했습니다.문제 링크: 큰 수 만들기 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:앞자리부터 숫자를 하나씩 보며 현재 숫자가 이전 숫자보다 크면 이전 숫자 제거이런 식으로 앞자리에 큰 수가 오도록 구성k개의 수를 제거한 뒤 남은 숫자 중 앞에서부터 필요한 자릿수만큼 반환해결 과정 및 코드핵심 아이디어숫자를 왼쪽에서부터 하나씩 탐색하면서 result[]에 저장지금 들어올 숫자 ..