Problem Solving/Programmers 13

【프로그래머스】 신고 결과 받기 (Kotlin)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 신고 기록 배열을 순회하며 두 가지 맵에 데이터를 추가한다. targetListMap 각 사용자가 신고한 다른 사용자 리스트를 포함하는 맵 reportCountMap 각 사용자가 신고된 횟수를 포함하는 맵 각 사용자가 신고한 다른 사용자가 정지된 경우 배열의 해당하는 원소를 증가시킨다. 맵에 데이터 추가하기 report에서 중복을 제거하고 다음을 반복한다. 신고 기록 데이터를 신고자와 피신고자로 분리한다. targetListMap에서 신고자에 해당하는 리스트에 피신고자를 추가한다. reportCou..

【프로그래머스】 숫자 문자열과 영단어 (Kotlin)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 String의 replace 함수로 문자열 안의 각 영단어를 숫자로 바꾼다. 마지막으로 문자열을 Int 타입으로 변환하면 된다. 코드 GitHub - blacksg/ProblemSolving Contribute to blacksg/ProblemSolving development by creating an account on GitHub. github.com class Solution { fun solution(s: String): Int { return s.replace("zero", "0") .r..

【프로그래머스】 이모티콘 할인행사 (Kotlin)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 이모티콘마다 다른 할인율을 적용했을 때 플러스 서비스 가입자 수 및 이모티콘 구매 금액을 IntArray에 담고 이를 최대 힙에 추가한다. 모든 경우에 대한 결과를 힙에 추가했다면 peek한 IntArray를 정답으로 리턴한다. 최대 힙 준비하기 IntArray를 담을 새 PriorityQueue 객체를 생성한다. 각 IntArray의 첫 번째 원소는 플러스 서비스 가입자 수이고 두 번째 원소는 이모티콘 판매액이다. 문제에서 제시한 목표에 따라 Comparator를 설정한다. // 서비스 가입자 수..

【프로그래머스】 택배 배달과 수거하기 (Kotlin)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 트럭이 출발할 때마다 가장 먼 집부터 최대 적재량만큼 배달 및 수거해야 최소 이동 거리로 배달 및 수거를 마칠 수 있다. 배달 및 수거 큐 구성하기 deliveries와 pickups를 각각 거꾸로 순회하며 큐에 각 집을 방문해야 하는 횟수만큼 추가한다. 이 로직은 두 번 실행해야 하므로 IntArray가 파라미터인 로컬 함수로 작성한다. val array: IntArray = /* deliveries 또는 pickups */ // 방문해야 하는 가장 먼 집을 담은 큐 val queue = Link..

【프로그래머스】 멀쩡한 사각형 (Kotlin)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 사용할 수 없는 정사각형을 표시해 보면 대각선을 따라 특정 패턴이 반복된다는 것을 확인할 수 있다. 이러한 패턴은 대각선이 정사각형의 꼭짓점과 만날 때마다 반복된다. 패턴을 포함하는 가장 작은 직사각형에서 사용할 수 없는 정사각형은 해당 직사각형의 가로 및 세로만큼 이동하므로 개수를 세면 총 \(\mathbf{(w+h)/gcd(w, h)-1}\)개임을 확인할 수 있다. 이 패턴이 \(\mathbf{gcd(w, h)}\)번 반복되므로 전체 직사각형에서 사용할 수 없는 정사각형의 개수는 총 \(\mat..

【프로그래머스】 배달 (Kotlin)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 우선순위 큐를 이용한 다익스트라 알고리즘을 적용했다. 그래프 HashMap을 사용하여 각 마을 사이의 도로 정보를 나타내는 그래프를 구성한다. 각 마을 번호를 키, 연결된 마을과 소요 시간을 Pair로 짝짓고 이를 포함하는 MutableList를 값으로 한다. val graph = hashMapOf() road.forEach { // MutableList에 도로로 연결된 두 마을의 연결 정보를 추가한다. graph.getOrPut(it[0]) { mutableListOf() }.add(it[1] t..

【프로그래머스】 소수 만들기 (Kotlin)

문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 중첩된 for 문을 사용하여 nums의 세 인덱스를 조합한 뒤, 해당 위치의 원소를 모두 합한다. 함수를 사용하여 합이 소수인지 판별한 결과에 따라 반환값을 증가시킨다. for 문 구성하기 조합하고자 하는 세 인덱스를 순서대로 i, j, k라 하자. j, k를 선택하기 위해 i는 0에서 시작하여 마지막 인덱스 - 2까지만 반복한다. j는 i와 중복되지 않도록 i + 1에서 시작한다. k를 선택하기 위해 마지막 인덱스 - 1까지만 반복한다. k는 j와 중복되지 않도록 j + 1에서 시작하며 마지막 인..

【프로그래머스】 힙 - 디스크 컨트롤러 (Kotlin)

문제 설명 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를 들어 - 0ms 시점에 3ms가 소요되는 A작업 요청 - 1ms 시점에 9ms가 소요되는 B작업 요청 - 2ms 시점에 6ms가 소요되는 C작업 요청 와 같은 요청이 들어왔습니다. 이를 그림으로 표현하면 아래와 같습니다. 한 번에 하나의 요청만을 수행할 수 있기 때문에 각각의 작업을 요청받은 순서대로 처리하면 다음과 같이 처리 됩니다. - A: 3ms 시점에 작업 완료 (요청에서 종료까지 : 3ms) - B: 1ms부터 대기하다가, 3ms 시점에 작업을 시작해서 12ms 시점에 작업 완료(요청에서 종료까지 : 1..

【프로그래머스】 더 맵게 (Java)

문제 설명 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요. 제한 사항 scovil..

【프로그래머스】 스택/큐 - 다리를 지나는 트럭 (Kotlin)

문제 설명 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다. 예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다. 경과 시간 다리를 지난 트럭 다리를 건너는 트럭 대기 트럭 0 [] [] [7, 4, 5, 6] 1~2 [] [7] [4, 5, 6] 3 [7] [4] [5, 6] 4 [7..

【프로그래머스】 스택/큐 - 프린터 (Kotlin)

문제 설명 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서 J를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라면 C D A B 순으로 인쇄하게 됩니다. 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 알..

【프로그래머스】 스택/큐 - 기능개발 (Kotlin)

문제 설명 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요. 제한 사항 작업의 개수(progresses, speeds 배열의 길이)는 100개 이하입니다. 작업 진도는 100 미만의 자연수입니다. 작업 속도는 100 이하의 ..