프로그래머스 10

프로그래머스 - level3/베스트 앨범/C++

해결방법 총 두 가지의 자료구조를 사용했음 1) 많이 재생된 장르가 뭔지 → key를 장르로 하고 value에 같은 장르의 전체 재생 횟수를 뒀음 2) 같은 장르 내에서 많이 재생된 노래 순서 → 고유 번호, 장르, 재생횟수를 가지는 struct를 만들어서 sort 해줌 두 개를 재생 횟수를 기준으로, 내림차순(DESC) 정렬해줬음 코드 #include #include #include #include #include using namespace std; struct Music { int idx=0; string genre; int play = 0; Music(int _idx, string _g, int _p):idx(_idx), genre(_g), play(_p){} }; map maxGenre; boo..

프로그래머스 - level2/가장큰수/C++

해결방법 이 문제는 정렬(sort)을 활용하여 풀 수 있음 제한 사항에 "정답이 너무 크니 문자열로 바꿔라"라고 있는데, int 형 배열 numbers를 string 배열로 바꾼 후, 정렬을 해줄 때 3번째 인자의 함수에서 커스텀 비교 함수를 넣어주면 됨 처음에는 sort 함수에서 to_string으로 바꿔서 numbers 배열의 순서를 바꿨었는데 시간초과가 되었음 🙁 참고사항 stl에서 제공하는 sort 함수의 파라미터는 위와 같습니닷 세 번째 파라미터가 뽀인트인데, 비교하고 싶은 두 개의 요소(인자)랑 return 값을 맞춰서 작성해줘야 합니다. 이 문제의 경우에는 조건을 숫자 1과 숫자 2를 붙여서 비교했을 때 더 큰 값만 넣어주면 됩니다. 예를 들어서, "6"과 "10"을 비교 시, 610 또는 ..

프로그래머스 - level 3/최고의 집합/C++

해결방법 문제 설명에 두 가지 조건이 있는데, 그중 두 번째 조건인 "위 조건을 만족하면서 각 원소의 곱이 최대가 되는 집합"이라는 것에 힌트를 얻을 수 있음 원소의 곱이 최대 → 나눗셈을 활용하여 해결 원소들의 합(s)을 원소의 개수(n)으로 나눠 몫을 구하면 원소 1개를 구할 수 있음 그러면 s에서 위에서 구한 원소 1개를 빼주면 (s -= div) 나머지 원소도 구할 수 있음 n > s인 경우(예시의 n=2, s=1)에 대한 예외 처리도 추가해 주면 됨 코드 #include #include #include #include using namespace std; vector solution(int n, int s) { vector answer; if(n>s) { answer.push_back(-1); ..

프로그래머스 - 탐욕법(Greedy)/체육복/C++

문제 설명 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를..

프로그래머스 - 완전탐색/모의고사/C++

문제 설명 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ... 1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작..

프로그래머스 - 정렬/k번째수/C++

문제 설명 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다. 예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면 array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다. 2에서 나온 배열의 3번째 숫자는 5입니다. 배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요. 제한사항 array의 길이는 1 이상 100 이하입니다. a..

카테고리 없음 2021.07.28

프로그래머스 - 스택/큐/기능개발/C++

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

카테고리 없음 2021.07.28

프로그래머스 - 해시/위장/C++

문제 설명 스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다. 종류 이름 얼굴 동그란 안경, 검정 선글라스 상의 파란색 티셔츠 하의 청바지 겉옷 긴 코트 스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다. 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다. 같은 이름을 가진 의상은 존재하지 않습니다. cloth..

카테고리 없음 2021.07.26

프로그래머스 - 해시/전화번호 목록/C++

문제 설명 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요. 제한 사항 phone_book의 길이는 1 이상 1,000,000 이하입니다. 각 전화번호의 길이는 1 이상 20 이하입니다. 같은 전화번호가 중복해서 들어있지 않습니다. 입출력 예제 ph..

카테고리 없음 2021.07.26

프로그래머스 - 해시/완주하지 못한 선수/C++

문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. 입출력 예 participant completion return ["leo", "kik..