본문 바로가기

프로그래머스lv339

[프로그래머스 lv3] 숫자 게임 풀이 해설A의 출전 순서를 알고 있으므로 원하는대로 A 선수와 B 선수를 매칭시킬 수 있다.B의 승리 횟수를 최대화 하기 위해서는 A의 작은 수들부터 차례로 이겨나가야 한다.A의 여러가지 수들 중에서 작은 수를 이기는 것이 큰 수를 이기는 것보다 가성비가 좋기 때문이다.  따라서, A와 B를 오름차순으로 정렬한 뒤 A[i]를 이길 수 있는 B의 원소를 탐색한다.A[i]를 이길 수 있는 B의 원소가 존재할 때 nwin을 1 증가시키고 최종 nwin 값을 리턴하면 정답이다.  코드#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace.. 2022. 9. 5.
[프로그래머스 lv3] 야근지수 풀이 해설n만큼의 시간을 이용해서 n만큼의 작업을 할 때, 남은 작업들의 제곱 합을 최소로 만드는 문제이다.현재 남아있는 작업 중에서 가장 값이 큰 작업을 먼저 줄여야 제곱의 합을 최소로 만들 수 있다.우선순위큐를 이용하여 현재 남아있는 작업들 중 가장 큰 값을 뽑고, 해당 값을 1로 줄여 다시 우선순위큐에 넣는다.이를 n만큼 반복하면, 제곱합을 최소로 할 수 있는 남아있는 작업 배열이 완성된다. 남아있는 작업 배열에서 각 원소를 제곱하여 더한 후 리턴하면 정답이다. 코드#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace st.. 2022. 9. 4.
[프로그래머스 lv3] 최고의 집합 풀이 해설가장 단순하게 백트래킹 방법이 떠오르지만, 백트래킹으로 n개의 합이 S가 되는 모든 경우를 탐색하면 TLE가 발생한다.dp 점화식도 세울 수 있지만, n과 s의 입력범위가 너무 커 해당 방법도 TLE가 날 것이 분명하다. 이 문제는 완전 탐색 없이 간단한 트릭을 통해 해결할 수 있다.특정 배열의 원소의 곱이 최대가 되려면, 각 원소가 최대한 균등해야 한다.예를 들어 n = 4 이고 s = 10일 때, 각 원소를 최대한 균등하게 하려면 s/n = 10/4 = 2 를 4개 마련하고 {2, 2, 2, 2} 여기에 나머지 2를 하나씩 더해준다. 결과적으로 {2, 2, 3, 3}이 최대 곱을 만드는 배열이 된다. n > s 이면 자연수 n개의합이 s가 되는 경우가 없으므로 {-1}을 리턴한다.n 최종 배열을 .. 2022. 9. 4.
[프로그래머스 lv3] 보석 쇼핑 풀이 해설해당 문제는 2020 카카오 인턴십에 출제되었던 문제로 공식 해설이 있습니다.2020 카카오 인턴십 for Tech developers 문제해설 처음에는 이분탐색 + 슬라이딩 윈도우 기법으로 O(NlogN)에 해결하였으나, 이상하게 WA + TLE 이 떠서 결국 투포인터 방법으로 해결하였다. 왼쪽 포인터 l과 오른쪽 포인터 r을 0번 진열대에 위치시키고, map m; 에 0번 진열대의 보석 개수를 1로 기록한다.이후, [l, r] 구간이 모든 종류의 보석을 포함하고 있는지 확인한다. 1) 만약, [l, r] 구간이 모든 종류의 보석을 포함하고 있다면, 길이가 r-l+1인 [l, r] 구간을 기록하고 l을 오른쪽으로 하나 이동시켜 구간의 길이를 줄여본다.2) 만약 [l, r] 구간이 모든 종류의 보석을.. 2022. 9. 3.
[프로그래머스 lv3] 입국심사 풀이 해설이분탐색의 대표적인 유형으로, 소요 시간의 탐색 범위를 반으로 줄여 나가면서 n명의 줄서기가 가능한 최소 소요시간을 log(n)에 구하는 문제이다.탐색 범위의 시작을 first, 탐색 범위의 마지막을 last라 했을 때, 주어진 시간이 mid = (first+last)/2 이면 n명의 사람이 모두 입국심사를 받을 수 있는지 확인한다. 만약, 가능하다면 일단 최소 시간을 mid로 기록하고, 탐색 시간의 끝을 last = mid-1로 조정한다. 만약, 가능하지 않다면 최소 시간의 탐색 범위를 first = mid+1로 조정한다. n명의 사람이 모두 mid 시간 내에 입국심사를 받을 수 있는지 확인하기 위해서는, 각 입국심사대에서 mid 시간에 몇명의 심사를 진행할 수 있는지(mid/times[i])를 구.. 2022. 9. 3.
[프로그래머스 lv3] 불량 사용자 풀이 해설banned_id 의 각 패턴에 일치하는 user_id 를 고르는 경우의 수를 구하는 문제이다.백트래킹 기법으로 banned_id[0], banned_id[1] .... banned_id[k-1] 에 일치하는 user_id[i]를 선택해 나가면 된다. banned_id[k] 에 해당하는 user_id[i]를 선택할 때는, 1) user_id[i]가 banned_id[0] ~ banned_id[k-1] 를 고르는 과정에서 선택되지 않았어야 하고2) user_id[i] 가 banned_id[k] 패턴과 일치해야 한다. 조건을 만족하는 user_id[i]를 선택한 후 k개의 선택된 user_id를 기록해놓는다.문제에서 아이디 목록의 내용이 동일한 경우는 하나로 세면 된다고 했으므로, k번까지 선택한 use.. 2022. 9. 2.
[프로그래머스 lv3] 추석 트래픽 풀이 해설요청 종료 시간과 수행시간이 여러 개 주어질 때, 1초당 최대 처리량을 구하는 문제이다. 1) 문자열을 순회하면서 파싱하고, 요청 시작시간과 요청 종료시간을 구해 각각을 다른 벡터에 넣어준다. 문자열을 파싱할 때는 sscanf 함수를 사용하면 포맷에 따른 정보를 바로 가져올 수 있다. hh, mm, ss, sss, t1(T의 소수점 앞부분), t2(T의 소수점 뒷부분)을 파싱 하고, 종료 시간을 정수형 시간으로 바꾼 뒤 시작 시간을 구해보자.  T의 소수점 앞부분 t1에 대하여, 시작시간을 만들려면 종료시간에서 t1*1000-t1을 빼주어야 한다. t1*1000이 아닌 t1*1000-t1인 이유는, 처리시간에 시작과 끝을 포함한다고 주어졌기 때문이다. 예를 들어, 종료 시간이 7000이고 2초 동안 .. 2022. 8. 31.
[프로그래머스 lv3] 합승 택시 요금 풀이 해설해당 문제는 2021 KAKAO BLIND RECRUITMENT 기출 문제로 아래 사이트에 공식 해설이 있습니다.2021 카카오 신입공채 1차 온라인 코딩 테스트 for Tech developers 문제해설 무지와 어피치가 i지점까지 합승을 하고, i지점부터 a, b를 각자 이동할 때, 총 요금은 dist[s][i]+dist[i][a]+dist[i][b] 이다.플로이드 와샬 알고리즘으로 특정 지점에서 특정 지점까지의 최단 거리를 모두 구하자.i = 1부터 i = n까지에 대하여 dist[s][i]+dist[i][a]+dist[i][b]의 최솟값을 찾고 리턴하면 정답이다. (참고하면 좋은 포스트: 최단거리구하기_플로이드 와샬(Floyd Warshall) 알고리즘)  팁해당 문제를 다익스트라 알고리즘으로.. 2022. 8. 30.
[프로그래머스 lv3] 등산 코스 정하기 풀이 해설해당 문제는 2022 KAKAO TECH INTERNSHIP 문제로 아래 사이트에 공식 해설이 있습니다.2022 테크 여름인턴십 코딩테스트 해설 1) 등산 코스는 출발 지점에서 시작하여 쉼터를 지나고(여러개 가능) 산봉오리를 지나 다시 쉼터를 지나고 출발지점으로 와야 한다.이 때, 출발 지점에서 산봉오리를 지난 후 다시 돌아오는 길은 올라갔던 길과 동일하게 내려오면 되므로 출발 지점 -> 산봉오리까지의 경로만 생각하면 된다. 즉, 이 문제는 출발 지점에서 산봉오리까지 도달할 때 최소 intencity를 구하는 문제이다. 2) 산봉오리는 중간에 여러개를 찍으면 안되고, 마지막 하나만 찍어야 한다. 이러한 조건을 만족시키려면, 간선 (x, y)가 주어졌을 때, 출발지점에서는 나가는 그래프만, 산봉오리에서.. 2022. 8. 29.