목록프로그래머스 (10)
정리와기록 블로그
문제 : programmers.co.kr/learn/courses/30/lessons/42628 코딩테스트 연습 - 이중우선순위큐 programmers.co.kr 접근: deque에 데이터를 담고, 최소 - 최대를 유지하게 한다. 삽입 시에만 정렬을 수행한다. d 1 연산은 pop_front, d -1 연산은 pop_back으로 처리한다. 코드: #include #include #include #include using namespace std; deque nums; vector solution(vector operations) { for (auto& s : operations) { if (s == "D 1") { if (nums.size() > 0) nums.pop_back(); } else if (s..
문제: programmers.co.kr/learn/courses/30/lessons/42587 코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린�� programmers.co.kr 접근: 큐에서 하나씩 빼보면서 남은 원소에 더 높은 등급이 있을 때와 아닐때로 행동을 달리해주면된다. location-- 해주는데, 만약 location location = Q.size() - 1 (마지막에 삽입) 2) 남은 우선순위가 없었다면 (출력할 차례) -> return answer 해..
보호되어 있는 글입니다.
문제 : programmers.co.kr/learn/courses/30/lessons/42578# 코딩테스트 연습 - 위장 programmers.co.kr 초기 접근: 중복되는 옷이 한 개도 없기 때문에, 경우의 수로 풀면 될 것 같다는 느낌을 받았습니다. 초기 접근은 선택하고, 안하고를 반복하여 전체 부분 집합을 만든 다음, answer를 부분 집합의 곱으로 구해주었습니다. 해당 접근으로 풀었을 때, 케이스1에서 오답이 발생했고 극단적인 경우를 생각해보았을 때, 2^30 - 1 > 10억이므로 안된다는 것을 알게 되었습니다. 실패 코드(일부): void PickSum(const int& n, int i, int subSum) { if (i == n) // 0부터 시작 { answer += subSum;..
문제: programmers.co.kr/learn/courses/30/lessons/42746 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 �� programmers.co.kr 접근: 처음에는 숫자의 수열 순서대로 하나씩 비교해서 정렬하려 했으나, 이내 틀리고 산탄총 식 코딩을 하다가 이건 아니다 싶어서 답을 찾아보았습니다. 꽤나 직관적이고 간단하게 정렬 함수는 다음과 같이 앞뒤 순서를 바꾼 결과를 비교하면 되는 것이었습니다. (true일 경우 sort시 우선순위가 높아집니..
문제: programmers.co.kr/learn/courses/30/lessons/42584?language=csharp 코딩테스트 연습 - 주식가격 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00 programmers.co.kr 접근: prices 배열의 원소를 하나씩 순회하면서, 주식이 떨어질때(prices[j] < prices[i]) 시간을 그만세고 다음 원소로 넘아가는 로직이면 됩니다. int time = 0부터 시작해야 마지막 원소의 시간을 처리할 수 있습니다. using System; public class Solu..
문제: https://programmers.co.kr/learn/courses/30/lessons/42586 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 �� programmers.co.kr 접근: 우선 얼마의 기간((100 - work) / speed)이 필요한지 기록한 배열을 만든다. (daysReq) 그런 다음, 해당 배열을 순회하면서 다음 인덱스의 days가 길 때만 카운트를 종료하고 이를 answer 배열에 넣어준다. (약간 규칙?같은 것인데 예제를 보다보면 answer를 어떻게 넣어줘야 할지 알 수 있다.) cnt만큼 ..
문제: https://programmers.co.kr/learn/courses/30/lessons/43162 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있�� programmers.co.kr 접근: 2차원 배열의 그래프에서 dfs로 순회하면서 connected component를 세면 되는 문제이다. 주의할 점은 노드 1개도 component로 세야 한다는 점이다. 전역 bool 변수를 두고, 1개라도 새로 path를 발견한다면 카운트(answer++)해준다. 코드: #include #include using namespace std..