본문 바로가기

Archived(CSE Programming)/알고리즘(C++)

(55)
프로그래머스_베스트앨범(해시) https://programmers.co.kr/learn/courses/30/lessons/42579 코딩테스트 연습 - 베스트앨범 | 프로그래머스 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 play programmers.co.kr 해당 문제도 해시 문제로 LV3의 문제였다. 문제 자체의 로직은 크게 어..
프로그래머스_위장(해시) https://programmers.co.kr/learn/courses/30/lessons/42578 코딩테스트 연습 - 위장 | 프로그래머스 programmers.co.kr 해당 문제는 해시 문제로 STL 라이브러리의 map을 통해 문제를 해결하였다. 의상 분류에 맞게 의상 개수를 증가 시키고 해당 분류의 조합으로 구성할 수 있는 의상 개수를 구하면 된다. 이 때 0(안입음) ~ 개수 중에서 몇 번 의상을 입을 것인 지를 고려하면 된다. 즉, 해당 의상 종류의 개수 +1 * 해당 의상 종류의 개수 +1 * ... 이런식으로 끝까지 곱한다음 0000....00 의 아무것도 입지 않은 경우의 수 1개만 빼주면 된다. #include #include #include using namespace std; in..
프로그래머스_전화번호 목록(해시) https://programmers.co.kr/learn/courses/30/lessons/42577 코딩테스트 연습 - 전화번호 목록 | 프로그래머스 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 r programmers.co.kr 해당 문제는 해시 유형으로 비교적 쉬운 난이도의 문제였다 먼저 전화번..
프로그래머스_카펫 https://programmers.co.kr/learn/courses/30/lessons/42842 코딩테스트 연습 - 카펫 | 프로그래머스 Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 빨간색으로 칠해져 있고 모서리는 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 빨간색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다. Leo가 본 카펫에서 갈색 격자의 수 brown, 빨간색 격자의 수 red가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수 programmers.co.kr 해당 문제는 완전탐색으로 모든 경우를 다 살펴보는 문제이다. 먼저 brown과..
프로그래머스_구명보트 https://programmers.co.kr/learn/courses/30/lessons/42885 코딩테스트 연습 - 구명보트 | 프로그래머스 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 50kg]이고 구명보트의 무게 제한이 100kg이라면 2번째 사람과 4번째 사람은 같이 탈 수 있지만 1번째 사람과 3번째 사람의 무게의 합은 150kg이므로 구명보트의 무게 제한을 초과하여 같이 탈 수 없습니다. 구명보트를 최대한 적게 사용하여 모 programmers.co.kr 해당 문제는 greedy로 접근하는 문제였다. 보트 개수를 사람 수 만큼 ..
프로그래머스_큰 수 만들기 https://programmers.co.kr/learn/courses/30/lessons/42883?language=cpp 코딩테스트 연습 - 큰 수 만들기 | 프로그래머스 programmers.co.kr 해당 문제는 Greedy 문제로 접근 방법은 각 숫자 범위 중 가장 큰 숫자를 추려내면 된다. i 번째 숫자 삽입 시에 지정지을 수 있는 범위는 i ~ k+i 이다. #include #include using namespace std; string solution(string number, int k) { string answer = ""; int bound = number.size()-k; // 경계선 int idx = -1; // 가장 최근 고른 idx // bound 개의 숫자를 만들 때 까지 ..
프로그래머스_소수찾기 https://programmers.co.kr/learn/courses/30/lessons/42839 코딩테스트 연습 - 소수 찾기 | 프로그래머스 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요. 제한사항 numbers는 길이 1 이상 7 이하인 문자열입니다. numbers는 0~9까지 숫자만으로 이루어져 있습니다. 013은 0, 1, 3 숫자가 적힌 종이 programmers.co.kr 숫자로 이루어진 문자열을 통해 만들 수 있는 소수인 특정 숫자를 만들 수..
프로그래머스_이중우선순위큐 https://programmers.co.kr/learn/courses/30/lessons/42628 코딩테스트 연습 - 이중우선순위큐 | 프로그래머스 programmers.co.kr 해당 문제는 이중우선순위큐이다. C++에 물론 priority_queue를 제공하긴 하지만 이중우선순위큐를 구현하려면 deque을 통해 정렬을 하면서 접근하는 방식이 보다 쉬울 듯하여 구현하였다. 삽입은 삽입 후에 꼭 정렬을 해줘서 우선순위를 지켜야 한다. 그리고 삭제는 최소값인지 최대값인지에 따라 pop_front, pop_back을 수행한다. #include #include #include #include using namespace std; vector solution(vector opers) { vector answ..