[프로그래머스] 디스크 컨트롤러 (Heap)
·
Algorithm/Coding Test Records
문제 소개오늘 풀었던 프로그래머스 - 디스크 컨트롤러 문제를 정리합니다.이 문제는 요청 시점과 소요 시간이 주어진 여러 작업을짧은 작업 시간 우선(SJF, Shortest Job First) 방식으로 스케줄링(소요시간 짫은 것>요청시간 빠른 것>작업번호 작은 것)하여,전체 평균 반환 시간(turnaround time)의 정수값을 구하는 문제입니다.문제 링크: 디스크 컨트롤러 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:jobs 배열을 요청 시점(시작 시간) 기준으로 정렬현재 시간까지 들어온 작업을 우선순위 큐에 추가우선순위 큐는 작업 소요시간 기준 오름차순 됨현재 시간이 다음 작업 요청 시점보다 이전이라면 → 다음 요청시간으로 건너뜀가장 짧은 작업부터 처리하면서 전체 반환 시..
[프로그래머스] 더 맵게 (Heap)
·
Algorithm/Coding Test Records
문제 소개오늘 풀었던 프로그래머스 - 더 맵게 문제를 정리합니다.이 문제는 스코빌 지수가 낮은 음식부터 두 개를 섞어 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 필요한 최소 섞기 횟수를 구하는 문제입니다.문제 링크: 더 맵게 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다: 가장 낮은 두 음식의 스코빌 지수를 뽑아서 새로운 음식으로 만들고, 다시 섞어야 하므로매번 최소값을 효율적으로 뽑기 위해 우선순위 큐(최소 힙) 사용조건을 만족할 때까지 반복하고, 모든 음식이 K 이상인지 확인(최소값 >= K) 후 정답 반환 해결 과정 및 코드핵심 아이디어최소 힙을 사용해 가장 작은 스코빌 두 개를 빠르게 추출새 스코빌 = a + b * 2 형식으로 생성새 음식을 다시 큐에 넣고 섞..
[프로그래머스] 가장 먼 노드 (BFS)
·
Algorithm/Coding Test Records
문제 소개오늘 풀었던 프로그래머스 - 가장 먼 노드 문제를 정리합니다.이 문제는 1번 노드를 시작점으로 해서, 가장 멀리 떨어진 노드(최단 거리 기준)의 개수를 구하는 문제입니다.즉, BFS(너비 우선 탐색) 을 통해 그래프에서 최장 레벨에 위치한 노드 개수를 세는 문제입니다.문제 링크: 가장 먼 노드 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:무방향 그래프를 인접 리스트로 구성1번 노드에서 BFS를 수행해, 다음 노드를 큐에 저장각 거리(깊이)별 노드 수(que.size()) 중 마지막 노드 수를 반환해결 과정 및 코드핵심 아이디어BFS 탐색을 통해 1번 노드에서 같은 거리에 있는 모든 노드를 구할 수 있음탐색 도중 가장 마지막 레벨(깊이)에서 탐색된 노드들의 수가 정답코..
[프로그래머스] 순위 (플로이드-워셜 Floyd-warshall)
·
Algorithm
문제 소개오늘 풀었던 프로그래머스 - 순위 문제를 정리합니다.이 문제는 1대1 경기 결과를 통해 선수 간 상대적 순위를 파악할 수 있는지를 묻는 문제입니다.모든 경기 결과가 주어지는 것이 아니기 때문에, 일부 선수는 순위를 정확히 매길 수 없고, 승패가 명확히 이어지는 선수들만 카운트해야 합니다.문제 링크: 순위 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:A가 B를 이김 => A → B 방향의 간선으로 모델링플로이드-워셜 알고리즘을 사용해, 간접적인 승패 관계까지 모두 파악합니다. (모든 쌍 간 승패 관계 계산)어떤 선수 i가 모든 다른 선수 j에 대해 (i가 j를 이기거나 j가 i를 이김)이 성립하면 → 순위 확정 가능해결 과정 및 코드핵심 아이디어chk[i][j] = t..
[프로그래머스] 방의 개수 (그래프)
·
Algorithm
문제 소개오늘 풀었던 프로그래머스 - 방의 개수 문제를 정리합니다.이 문제는 원점에서 시작해 8방향으로 선을 그려가며 이동할 때,새로운 방이 몇 개 생기는지를 구하는 문제입니다.문제 링크: 방의 개수 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:각 점(좌표)은 노드(node), 두 점을 잇는 선은 간선(edge)로 보고, 그래프처럼 모델링합니다.이동 경로 중, 이미 방문한 노드를 새롭게 다른 경로로 들어갔을 때 방이 생긴다는 특성을 이용합니다.사선 이동이 있는 그래프이기 때문에, 꼭지점 교차(중간 점)를 방지하기 위해 2번씩 이동합니다.해결 과정 및 코드핵심 아이디어방향은 총 8방향(0~7), (상, 우상, 우, 우하, 하, 좌하, 좌, 좌상)nodes: 방문한 좌표 기록 (..
[프로그래머스] 네트워크 문제 (유니온 파인드 Disjoint Set)
·
Algorithm
문제 소개오늘 풀었던 프로그래머스 - 네트워크 문제를 정리합니다.이 문제는 여러 컴퓨터가 연결되어 있을 때, 서로 연결된 컴퓨터들의 묶음(네트워크)의 수를 구하는 문제입니다.문제 링크: 네트워크 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:각 컴퓨터를 하나의 그룹(네트워크)으로 생각하고, 연결된 컴퓨터끼리 같은 그룹으로 합칩니다 (Union)모든 연결 관계를 처리한 후, 최종적으로 남은 독립된 그룹(부모가 다른 것들)의 수를 세어 네트워크 개수를 구합니다.해결 과정 및 코드핵심 아이디어처음에는 컴퓨터 각각을 독립적인 그룹으로 초기화합니다.연결 정보가 1인 경우, 두 컴퓨터를 같은 그룹으로 합칩니다(union).두 컴퓨터가 이미 같은 그룹이면 아무것도 하지 않습니다.서로 다른 ..
[프로그래머스] 단어 변환 (BFS)
·
Algorithm
문제 소개 오늘 풀었던 프로그래머스 - 단어 변환 문제를 정리합니다.이 문제는 주어진 단어 집합을 이용해, begin 단어를 target 단어로 변환하는 가장 짧은 경로(최소 단계)를 구하는 문제입니다.문제 링크: 단어 변환 - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:BFS를 사용하여 가장 짧은 변환 과정을 탐색합니다.변환 가능한 단어는, 단 한 글자만 다르고 words 집합에 있는 단어여야 합니다.방문한 단어는 다시 방문하지 않도록 관리(visited)합니다.해결 과정 및 코드핵심 아이디어Queue를 사용하여 현재 단어와 변환 깊이를 함께 저장하고 탐색합니다.현재 단어에서 변환할 수 있는 단어를 찾으면, 그 단어를 큐에 넣고 depth를 +1 증가시킵니다.target에 도..
[프로그래머스] 징검다리 (이분탐색)
·
Algorithm
문제 소개 오늘 풀었던 프로그래머스 - 징검다리 문제를 정리합니다.이 문제는 출발지점부터 도착지점까지 가는 경로 중,바위를 n개 제거하여 "각 지점 사이의 거리의 최솟값"을 최대화하는 문제입니다.문제 링크: 징검다리 - 프로그래머스 문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:"거리의 최솟값"이 얼마나 될 수 있는지를 이분 탐색합니다.특정 거리(mid)를 기준으로, 이 거리보다 짧은 구간이 생기지 않도록 하려면 몇 개의 바위를 제거해야 하는지 계산합니다.제거해야 하는 바위 수가 n개 이하이면 거리를 늘리고, 초과하면 줄입니다.해결 과정 및 코드핵심 아이디어거리의 최소 후보값을 mid로 잡고,rocks 배열을 순회하면서:현재 위치와 이전 위치 차이가 mid보다 작으면 바위를 제거그렇지 않으면..
[프로그래머스] 입국 심사 (이분탐색)
·
Algorithm
문제 소개오늘 풀었던 프로그래머스 - 입국심사 문제를 정리합니다.이 문제는 여러 심사관이 있을 때, 모든 사람이 심사를 완료하는 데 걸리는 최소 시간을 구하는 문제입니다.심사 시간이 다르기 때문에, 각 심사관별로 동시에 심사할 수 있다는 점을 활용해야 합니다.문제 링크: 입국심사 - 프로그래머스사다리 조작 - 백준 15684번문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:심사 시간이 다양한 상황에서, 가능한 심사 완료 시간을 이분 탐색으로 좁혀갑니다.현재 시간(mid) 안에 몇 명을 심사할 수 있는지 계산합니다.심사할 수 있는 인원 수가 n명 이상이면 시간을 줄이고, 부족하면 시간을 늘립니다.해결 과정 및 코드핵심 아이디어left: 가능한 최소 시간 (1분)right: 가능한 최대 시간 (가..
[프로그래머스] H-Index (정렬)
·
Algorithm
문제 소개오늘 풀었던 프로그래머스 - H-Index 문제를 정리합니다.이 문제는 어떤 과학자의 논문 인용 기록을 보고, H-Index를 구하는 문제입니다.H-Index란, h번 이상 인용된 논문이 h편 이상이고, 나머지 논문은 h번 이하 인용된 경우의 h값 중 최댓값을 의미합니다.문제 링크: H-Index - 프로그래머스문제 접근 방식이 문제는 다음과 같은 방식으로 접근했습니다:논문의 인용 수 배열을 오름차순 정렬합니다.인용 수(a)와 a번 이상 인용한 논문 수(b)를 비교하여, 가능한 h의 최댓값을 찾습니다.구체적으로, citations[i](=인용수 a)와 (논문 총 개수 - 현재 인덱스)(= a번 이상 인용한 논문 수 b) 중 더 작은 값을 h의 후보로 삼아 최댓값을 갱신합니다.a >= b 일 경..