반응형

알고리즘 문제 240

프로그래머스 할인 행사 (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.krXYZ마트는 하루 한 품목씩 10일동안 할인을 합니다. 정현이가 원하는 제품을 담은 want 배열과 제품의 수량을 나타내는 number, 그리고 할인 품목을 나타내는 discount 배열을 입력받을 때, 정현이가 원하는 제품 모두 할인 받을 수 있는 날의 총 일수를 구해주세요. 풀이 방법map을 이용하여 풀이합니다. map w, d;품목의 이름, 개수를 담은 map을 두개 생성합니다. 하나는 정현이가 원하는 품목, 하나는 현재 할인중인 품목입니다. for (auto p : w){ string name = p.first; int cnt = p.sec..

프로그래머스 연속 부분 수열 합의 개수 (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr원형 수열의 모든 원소를 입력 받을 때, 원형 수열의 연속 부분 수열합으로 만들 수 있는 수의 개수를 구해주세요. ex) 7, 9, 1, 1, 4길이가 1인 부분 수열 -> 1, 4, 7, 9길이가 2인 부분 수열 -> 2, 5, 10, 11, 16길이가 3인 부분 수열 -> 6, 11, 12, 17, 20길이가 4인 부분 수열 -> 13, 15, 18, 21길이가 5인 부분 수열 -> 22총-> 18개 풀이 방법중복되는 수가 나올 수 있는 경우를 생각해줘야 합니다.중복을 애초에 제거해주는 set으로 수를 관리하면 이 부분은 쉽게 해결됩니다. set s;fo..

프로그래머스 택배상자 (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr영재는 택배상자를 트럭에 싣는 일을 합니다. 1번 상자부터 N번 상자까지 번호가 증가하는 순서대로 컨테이너 벨트에 실을 수 있고앞뒤로 움직이는 보조 컨테이너 벨트에 임시로 상자를 실을 수도 있습니다. 택배 기사님이 원하는 상자 순서대로 메인 컨테이너 벨트에 상자를 보낼 때, 총 몇개를 보낼 수 있는지 구해주세요.[4, 3, 1, 2, 5]를 입력 받을 때, 첫번 째로 4를 보내기 위해서 보조 벨트에 1, 2, 3을 보내고 메인 벨트에 4를 보냄, 이후 보조 벨트에 3을 꺼내서 보내고 마무리. 총 2개 풀이 방법1. 초기 변수 선언stack s: 스택은 임시로..

프로그래머스 롤케이크 자르기 [Lv.2] (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr롤케이크 위에는 여러가지 토핑이 올라가 있습니다. 철수와 동생이 같은 수의 토핑종류를 가지려고 할 때, 케이크를 반으로 나누는 경우의 수가 몇개인지 찾아주세요.[1, 2, 1, 3, 1, 4, 1, 2]를 입력받을 때, [1, 2, 1, 3], [1, 4, 1, 2]로 나눌 수 있고 [1, 2, 1, 3, 1], [4, 1, 2]로 나눌 수 있습니다. 풀이 방법topping의 길이가 최대 1,000,000이기 때문에 시간 초과를 고려해서 문제를 풀어야합니다. 따라서 케이크를 자를 수 있는 위치에서 모든 곳을 순회하여 토핑종류의 수를 구하게되면 안됩니다. Ma..

프로그래머스 숫자 카드 나누기 [Lv. 2] (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr철수와 영희가 가진 각각의 숫자를 입력받을 때, 한 명이 가진 모든 숫자를 나눌 수 있고, 다른 한 명이 가진 모든 숫자를 나눌 수 없는 수를 찾아주세요. (해당되는 숫자가 여러 개라면 가장 큰 수를 반환)  풀이 방법최대 공약수를 찾는 문제입니다. 유클리드 호제법을 이용하여 최대 공약수를 찾아줘야합니다.int gcd(int a,int b){ if(b == 0) return a; return gcd(b, a % b);}  유클리드 호제법 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전. 유클리드 호제법(-互除..

프로그래머스 귤 고르기 [Lv. 2] (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr상자에 담으려는 귤의 개수 K와 귤의 각 크기를 담은 배열을 입력 받을 때,  경화가 귤 k개를 고를 때 크기가 서로 다른 종류의 수의 최솟값을 구해주세요.  풀이 방법귤의 종류의 개수를 기준으로 내림차순 정렬 후, 순서대로 개수를 더하여 K개를 넘는 위치가 어디있지 찾으면 됩니다. 1. map을 이용하여 귤 종류별 개수를 찾아줍니다.map t;for (int n : tangerine) t[n]++; 2. map에 있는 데이터를 vector로 옮긴 후 개수를 기준으로 내림차순 정렬을 합니다.vector> v;for (auto p : t) v.pus..

프로그래머스 마법의 엘리베이터 [Lv. 2] (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr1 ~ 100,000,000의 수를 입력 받을 때, -1, +1, -10, +10, -100, +100 등과 같이 절댓값이 10c (c ≥ 0 인 정수) 형태인 정수들을 더하여 0을 만드는 최소 비용을 구해주세요.  풀이 방법각 자리수 별로 0으로 만들어 주는 최소 비용을 구해주고 모두 더해주면 됩니다.ex) 1234를 입력 받은 경우4 -> +6 or -43 -> +7 or -32 -> +8 or -21 -> +9 or -1 자리수별 최소비용을 구한 후 더해주면 모두 해결이 될 것 같지만한 가지 문제가 발생합니다. +기호를 이용하여 자리수를 0으로 만들어주..

프로그래머스 무인도 여행 [Lv. 2] (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr지도를 나타낸는 문자열 maps가 매개변수로 주어질 때, 각 섬에서 최대 며칠씩 머무를 수 있는지 배열에 오름차순으로 담아 return 하는 solution 함수를 완성해주세요. result : [1, 1, 27]  풀이 방법BFS나 DFS를 이용해서 연결되어 있는 섬을 찾은 후연결된 섬들의 머물 수 있는 시간을 배열에 담아줍니다.이후 정렬하여 반환하여 마무리합니다. BFS 코드int dy[4] = {1, -1, 0, 0};int dx[4] = {0, 0, 1, -1};int BFS(vector& maps, vector>& visited, int y, int..

프로그래머스 리코쳇 로봇 [Lv. 2] (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr로봇의 위치를 목표지점까지 옮기는 게임입니다. 로봇을 목표 지점까지 옮기는 가장 적은 비용을 찾아주세요.(로봇을 이동시킬 때는 벽이나, 장애물에 닿을 때까지 이동해야 합니다.)  풀이 방법DFS를 이용해서 풀이합니다. 좌,우로 이동하는 경우와 위,아래로 이동하는 모든 경우의 수를 탐색해줍니다.// (좌 우 위 아래) 4방향 탐색for (int i = 0; i = 0 && nx + dx[i] = 0 && board[ny + dy[i]][nx + dx[i]] != 'D') { ny += dy[..

프로그래머스 호텔 대실 [Lv. 2] (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 예약 시각이 문자열 형태로 담긴 2차원 배열 book_time이 매개변수로 주어질 때, 코니에게 필요한 최소 객실의 수를 return 하는 solution 함수를 완성해주세요.  풀이 방법"겹치는 예약"을 찾고 "최대로 겹치는 방의 개수"를 찾아서 출력하면 되는 문제입니다. 1. string으로 입력받은 예약 시간을 인덱싱이 가능하도록 int로 바꿔줍니다.int ttoi(string time, bool isEnd = false){ int ret = isEnd ? 9 : 0; // (청소시간 포함하여 9) ret += time[4] - '0'; ..

반응형