본문 바로가기

Java

(110)
[백준/1966] 프린터 큐(Queue<int[]> q = new LinkedList<>(), q.offer(new int[]{j, level}), int[] cur = q.poll(), if (doc[1] > cur[1]), if (isPrint) {printOrder++ ... }, if (cur[0] == M), else {q.offer(cur)}) ✏️ 문제 설명여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게 된다. 하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, 이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다. 현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를 확인한다. 나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면, 이 문서를 인쇄하지 않고 Queue의 가장 뒤에 재배치 한다. 그렇지 않다면 바로 인쇄를 한다. 예를 들어 Queue에 4개의 문서(A B C D)가 있고, 중요..
[알고리즘/DFS, BFS] 깊이 우선 탐색, 넓이 우선 탐색 (스택, 재귀함수, 큐, 방문 여부 배열, 그래프 연결 정보 저장 2차원 리스트) 🖥️ 들어가며📌DFS: Depth First Search, 깊이 우선 탐색📌BFS: Breadth First Search, 넓이 우선 탐색 ✏️ 스택 구현 예제Stack s = new Stack();삽입: push()삭제: pop()최상단 원소부터 출력: peek()import java.util.*;public class Main { public static void main(String[] args) { Stack s = new Stack(); // 삽입: push, 삭제: pop s.push(5); s.push(2); s.push(3); s.push(7); s.pop(); s.push(1..
[알고리즘/시간복잡도] 시간제한을 고려하자 (빅오표기법, 문제 이해, 핵심 아이디어, 소스코드로 작성하기) 📒 정리하면 O(N): for문 / O(N^2): 2중 반복문연산 횟수가 5억을 넘어가는 경우, Java: 일반적으로 3~7초 가량의 시간이 소요됩니다.코딩 테스트 문제의 시간제한: 1~5초 가량입니다.문제를 온전히 이해하고 → 핵심 아이디어를 정리한 뒤에 → 소스코드를 작성하자!   참고자료https://youtu.be/m-9pAwq1o3w?si=7hccZupFuUz-lLP2
[프로그래머스/120890] 가까운 수(Math.abs(), Math.min(answer, array[i]), 처음부터 배열을 sort했다면?) ✏️ 문제 설명정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요. 제한사항1 ≤ array의 길이 ≤ 1001 ≤ array의 원소 ≤ 1001 ≤ n ≤ 100가장 가까운 수가 여러 개일 경우 더 작은 수를 return 합니다. ✏️ code📌 Math.abs(): array[i]와 n의 차를 절대값으로 변경합니다.📌 if(valueDiffs[i] == minDiff) { answer = Math.min(answer, array[i])}: 동일한 차가 발생한 경우, 더 작은 수를 return 합니다.🖥️ 아쉬운 점: array를 sort한 뒤 차이를 구했다면, 같은 차이를 갖는 갑슫..
[프로그래머스/120864] 숨어있는 숫자의 덧셈(2) (.isEmpty(), Integer.parseInt()) ✏️ 문제 설명문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.✏️ code📌 !s.isEmpty(): split["[a-zA-Z]"]로 문자열을 나눌 때 빈 문자열("")이 포함될 수 있기 때문에, 이를 제외한 int값만 더하기 위해 !s.isEmpty()로 필터링해 주었습니다.📌 !s.isEmpty(): s는 String이기 때문에 int값으로 변환하기 위해 Integer.parseInt(s)를 한 뒤 answer에 더했습니다.class Solution { public int solution(String my_string) { ..
[프로그래머스/120885] 진료순서 정하기(Arrays.sort(), Arrays.binarySearch(), emergency.length - Arrays.binarySearch(sorted.emergency[i]) ✏️ 문제 설명외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요. ✏️ code📌 Arrays.sort(sorted): emergency를 복사해 sorted 배열을 만듭니다. 그리고 이를 sort하여 오름차순으로 정렬합니다.📌 Arrays.binarySearch(): 배열에서 요소가 위치하는 인덱스를 찾습니다.📌 int rank = emergency.length - Arrays.binarySearch(sorted, emergency[i])- emergency: [3, 76, 24] / sorted: [3, 24..
[프로그래머스/120887] k의 개수 (k+'0') ✏️ 문제 설명1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요. ✏️ code📌 k+'0'- k는 int, c는 char이기 때문에 문자와 정수를 직접 비교할 수 있습니다. 따라서 정수 k를 문자로 변환해야 하는데 여기서 +'0'이 사용됩니다.- k+'0'에서 만약 k가 2인 경우1) 정수 연산: 2 + '0' → 2 + 48('0'의 ASCII) → 502) char로 변환: (char) 50 → 문자 '2'로 변환3) 따라서 c == (char) (k+'0') 비교가 가능한 것입니다.class Solution { ..
[프로그래머스/18832] 정수를 나선형으로 배치하기(사방탐색 알고리즘) ✏️ 문제 설명양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요.✏️ code📌 dx, dy (사방 탐색 방향 배열): 시계방향 나선형으로 움직이기 때문에 →↓←↑ 순서대로 dx, dy 설정하였습니다.(→: 0,+1 / ↓: +1, 0 / ←: 0, -1 / ↑: -1, 0)📌 direction (탐색 방향 결정): direction 0 → 1 → 2 → 3 안에서 계속 반복될 수 있도록 (direction + 1 ) % 4 처리하였습니다.📌 nx, ny (다음 = next x, y)- nx = x(현재 x)+dx[direction](탐색 진행 방향..

반응형