코딩테스트 8

[프로그래머스] 디스크 컨트롤러

※ 해당 문제의 링크는 여기입니다. ※ 3단계 문제인 만큼 굉장히 어려웠던 문제였습니다. 이번 글에는 제한 사항 대신 알고리즘 및 전체 코드만 포스팅하겠습니다. (제한 사항, 문제에 잘 적혀있는 데 또 적는 거 귀찮....) 알고리즘 가장 시간이 짧은 순서대로 일을 처리해야하는 것이 주 목적입니다.하지만 일은 한 번에 하나씩만 처리가 가능하므로일이 끝나고 나서 현재 시간때 이전에 들어온 일들 중 가장 시간이 짧은 것을 다음으로 일을 하며,하나 하나씩 처리해야하는 알고리즘을 가지고 있습니다. 단, 요청 시간. 즉, 언제 들어왔는 지 역시 파악해야하는 문제입니다. 전체 소스코드 import java.util.*; class Solution { public int solution(int[][] jobs) { ..

[프로그래머스] 더 맵게

※ 해당 문제의 링크는 여기입니다. ※ 프로그래머스에서 설명되어 있듯이 "힙을 이용해서 우선순위 큐를 구현할 수 있습니다." 라고 설명되었있습니다. 우선순위 큐와 힙에 대해서 궁금하신 분들은 링크 참조해주세요. 제한사항 스코빌의 길이는 2이상 1000000 입니다. K는 0이상 1000000000 입니다. 스코빌의 원소는 각각 0이상 1000000 입니다. 모든 음식의 스코빌 지수를 K이상으로 만들 수 없다면 -1를 반환합니다. 문제는 레벨 2 치곤 꽤 쉬운 편입니다. (레벨 1에서 이상한 문제를 만난 적이 있어서 일종의 트라우마가 생겨버린 것 같기도;;) 그리고 효율성 테스트까지 있기때문에 시간복잡도도 적당히 꼬아야합니다. (재귀함수를 사용해서는 효율성 테스트를 통과하기 어렵다는 의미입니다.) 알고리즘..

[프로그래머스] 주식가격

※ 해당 문제의 링크는 여기입니다. ※ Queue를 활용하여 문제를 해결하였습니다. ※효율성 테스트가 있습니다. 혼자서 푸실 분들은 유의해주세요.※ 제한사항 prices의 각 가격은 1 이상 10,000 이하인 자연수입니다. prices의 길이는 2 이상 100,000 이하입니다. 문제만 보고 헷갈릴 수 있습니다. 질문하기에 자세히 작성해주신 분이 있으셨습니다. 감사합니다. (링크) 알고리즘 굉장히 간단한 문제입니다. 배열로도 충분히 해결할 수 있는 문제입니다. 하지만 스택으로 문제를 해결하려고 했지만, 스택을 자주 사용해보지 않아 잘 몰라, 그나마 조금이라도 더 아는 Queue로 문제를 해결하였습니다. public int getTimeWhenFalls(int currentPrice, Queue left..

[프로그래머스] 다리를 지나는 트럭

※ 해당 문제의 링크는 여기입니다. ※ Inner Class를 사용해 문제를 해결하였습니다. 제한사항 bridgeLength 길이의 다리가 있고, 정해진 순서에 맞춰 트럭이 건너가야 한다. 트럭마다 무게가 각각 존재한다. bridgeLength길이만큼 트럭을 다리 위로 이동시킬 수 있으나, 다리가 최대로 버틸 수 있는 무게는 정해져 있다. 트럭은 한 번에 1씩만 움직일 수 있고, bridgeLength만큼 전부 움직여야 다리를 완전히 건넌 것이다. 한 번에 하나의 행동만 가능하다. (동시에 트럭을 2대 이상 이동시킬 수 없음) 위 문제에 자세히 설명이 되어있지 않아, 문제를 풀어서 설명하였습니다. 알고리즘 문제를 이해하는 데에 오래 걸렸습니다. 질문하기에서도 많은 분들이 문제를 이해하기 어려워하셨습니다...

[프로그래머스] 프린터

※ 해당 문제의 링크는 여기입니다. ※ 다른 분들이 푸신 방법이 더 좋을 수도 있지만 제가 생각해낸 방법으로 포스팅하도록 하겠습니다. (대부분 Inner Class, Queue 둘 중 하나, 혹은 둘 다 사용하셔서 푸셨습니다. 저 같은 경우에는 Queue만 사용하여 해결했습니다.) 제한사항 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냄 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣음 그렇지 않으면 J를 인쇄 알고리즘 문제를 파악함에 있어 제가 가장 중요하게 확인한 점은 값이 같더라도 위치를 정확하게 파악하는 것이었습니다. 그리고 해당 값을 인쇄, 즉 사라지게 된 후에는 다시 제한사항을 반복한다는 점이었습니다. 그래서 개인적으로 ..

[프로그래머스] 기능개발

※ 해당 문제의 링크는 여기입니다. ※ 배열로 푸는 편이 더 코드가 단순해지지 않을까 생각하였지만 스택/큐 영역인 만큼 이 둘을 최대한 사용하는 것이 맞다고 생각이 들어 Queue를 사용하여 문제를 해결하였습니다. 코드와 알고리즘 로직을 설명하기 앞서 문제에서 주의 깊게 봐야 하는 점들을 먼저 설명하도록 하겠습니다. 제한 사항 배포는 하루에 한 번만 가능하다. 뒤에 있는 기능을 먼저 완성하였다고 바로 배포할 수 없고, 앞에 있는 기능이 완성된 후, 같이 배포하게 된다. 한 번에 몇 개 배포하였는지 카운트를 배열에 저장한 후, 이를 반환해주어야 한다. 테스트 케이스 및 설명도 잘 되어있어 두세 번 정도 읽어보면 금방 이해할 수 있습니다. 알고리즘 로직 일단, 모든 알고리즘 해결 방식은 굉장히 많으므로 제가..

[프로그래머스] 베스트 앨범

※ 해당 문제의 링크는 여기입니다. ※ 다른 분들이 푸신 방법도 보았으나 내부 클래스 만드셔서 하시는 경우가 대부분이었으나 저는 HashMap 3개를 만들어 해결하였습니다. 3가지 조건을 충족하기 위해 HashMap을 만들었습니다. 각각의 HashMap은 장르, 재생 횟수 / 장르, 총 재생 횟수 / 고유 번호, 재생 횟수 로 하였습니다. HashMap songs = new HashMap(); // 장르, 횟수 HashMap heardTimes = new HashMap(); // 장르, 총 횟수 HashMap unique = new HashMap(); // 고유 번호, 횟수 장르를 키로 몇 번 재생한 횟수를 저장을 for문을 사용하여 저장하였습니다. for (int i = 0; i < genres.len..