본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Java(자바)/코딩 테스트 & 알고리즘17

9. 디스크 컨트롤러 (프로그래머스, 힙 Level 3) * 문제설명 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를들어 1) 0ms 시점에 3ms가 소요되는 A작업 요청 2) 1ms 시점에 9ms가 소요되는 B작업 요청 3) 2ms 시점에 6ms가 소요되는 C작업 요청 와 같은 요청이 들어왔습니다. 이를 그림으로 표현하면 아래와 같습니다. 한 번에 하나의 요청만을 수행할 수 있기 때문에 각각의 작업을 요청받은 순서대로 처리하면 다음과 같이 처리 됩니다. - A: 3ms 시점에 작업 완료 (요청에서 종료까지 : 3ms) - B: 1ms부터 대기하다가, 3ms 시점에 작업을 시작해서 12ms 시점에 작업 완료(요청에서 종료까지 .. 2021. 3. 2.
8. 더 맵게 (프로그래머스, 힙 Level 2) * 문제 설명 - 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. - 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) - Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. - Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요. 제한.. 2021. 1. 26.
7. 프린터 (프로그래머스, 스택/큐 Level 2) * 문제 설명 - 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. - 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. - 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. - 예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라면 C D A B 순으로 인쇄하게 됩니다. - 내가 인쇄를 요청한 문서가 .. 2021. 1. 21.
6. 기능개발 (프로그래머스, 스택/큐 Level 2) * 문제 설명 - 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. - 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. - 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요. * 제한 사항 - 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다. - 작업 진도는 100 미만의 자연수입니다. - .. 2021. 1. 19.
Java Quick 정렬 알고리즘은 언제나 개념을 이해한 뒤에 정답을 보지 않고 직접 코딩을 해 보아야 실력이 되는 것 같습니다. 단순히 개념만 이해하고 넘어가면 개념만 남을 뿐 실제 코딩이 되지 않기 때문 입니다. 퀵정렬은 피봇(pivot)을 기준으로 기준값보다 크고 작음을 판별한 뒤에 서로의 위치를 바꾸어주는 알고리즘 입니다. 피봇(pivot)의 개념은 비교할 기준을 의미 합니다. int data [] = {6,7,1,4,5,3,2}; 위 처럼 숫자형 배열이 존재하는 경우에 기준을 6번값으로 한 뒤에 본인보다 크고 작은 숫자를 골라냅니다. 여기서 정렬방법은 오름차순 입니다. 크고 작은 숫자를 고르는 방법은 아래 사진처럼 진행합니다. 숫자6을 기준으로 작은 값은 좌에서 우측으로 이동하며 찾습니다. 큰 값은 맨 마지막에서 이동하.. 2021. 1. 17.
Java Heap 정렬 #0. 힙 정렬을 위한 개념 준비 ──────── 자바(Java)를 통해서 빠르고 훌륭한 힙정렬(Heap sort)에 대해서 정리 해 보겠습니다. 예전 공부를 할 때는 의사코드(pseudo code)로만 보고 "아~ 저런 개념이구나~" 하고 넘어갔었는데, 실제 구현하려 해 보니 어렵고 시간이 꽤 걸렸던 것 같습니다. 알고리즘은 역시 실제 타이핑을 해 보아야 하는 것을 다시한번 깨달았습니다. 힙정렬에서의 데이터 정렬을 위한 구조는 배열을 이진트리(binary tree)형태로 구분하는 것 입니다. 이진트리는 배열의 관계를 부모 - 자식간의 형태로 데이터를 정렬하는 것을 의미 합니다. 부모는 0~2개의 자식을 가질 수 있으며 2개 이후의 자식은 다음 세대의 부모가 됩니다. 아래와 같이 숫자형태의 배열이 존재합.. 2021. 1. 14.