c++ 20

프로그래머스 lvl 2. 타겟 넘버 [C++]

n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요. 접근 point bfs/dfs 알고리즘 Index 0 부터 시작하여 Index가 '배열 사이즈 - 1'을 도달 할 때 까지 + 혹은 - 로 계산하여..

프로그래머스 2023.08.17

프로그래머스 lvl 2. 영어 끝말잇기 [C++]

1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 영어 끝말잇기는 다음과 같은 규칙으로 진행됩니다. 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말합니다. 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작합니다. 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다. 이전에 등장했던 단어는 사용할 수 없습니다. 한 글자인 단어는 인정되지 않습니다. 다음은 3명이 끝말잇기를 하는 상황을 나타냅니다. tank → kick → know → wheel → land → dream → mother → robot → tank 위 끝말잇기는 다음과 같이 진행됩니다. 1번 사람이 자신의 첫 번째 차례에 tank를 말합니다. 2번 사람이 자신의 첫 번째 차례에 kick을 ..

프로그래머스 2023.07.07

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

경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 'k'개를 골라 상자 하나에 담아 판매하려고 합니다. 그런데 수확한 귤의 크기가 일정하지 않아 보기에 좋지 않다고 생각한 경화는 귤을 크기별로 분류 했을 때 서로 다른 종류의 수를 최소화하고 싶습니다.예를 들어, 경화가 수확한 귤 8개의 크기가 [1, 3, 2, 5, 4, 5, 2, 3] 이라고 합시다. 경화가 귤 6개를 판매하고 싶다면, 크기가 1, 4인 귤을 제외한 여섯 개의 귤을 상자에 담으면, 귤의 크기의 종류가 2, 3, 5로 총 3가지가 되며 이때가 서로 다른 종류가 최소 일 때 입니다.경화가 한 상자에 담으려는 귤의 개수 k와 귤의 크기를 담은 배열 tangerine 이 매개변수로 주어집니다. 경화가 귤 k개를 고를 때 크기가 서로 ..

프로그래머스 2023.07.05

프로그래머스 lvl 2. 더 맵게 [C++]

매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코비 지수 * 2) Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해서 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요. ex) scoville = [1..

프로그래머스 2023.07.04

프로그래머스 lvl 2. 전화번호 목록 [C++]

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이 전화번호의 접두사입니다. 구조대: 119 박준영: 97 674 223 지영석: 11 9552 442 전화번호부에 적힌 전화번호를 담은 배열 phone_book이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를, 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요. 접근 point 정렬 사용 phone_book[i] == phone_book[i+1].substr(0, phone_book[i].length()) 예) ["12", "567", "888", "123", "12..

프로그래머스 2023.07.03

프로그래머스 lvl 2. 숫자의 표현 [C++]

Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다. 1 + 2 + 3 + 4 + 5 = 15 4 + 5 + 6 = 15 7 + 8 = 15 15 = 15 자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution을 완성해주세요. 접근 point n보다 작거나 같은 연속된 자연수 투 포인터 사용 n = 10 일 때, 포인터 s 와 e 를 생성하여, index = 0 부터 시작한다. s 와 e 자리에 있는 값을 더한 후, n 보다 작으면 e 포인터를 올려 새로운 e 자리에 있는 값을 더하고, n..

프로그래머스 2023.07.02

프로그래머스 lvl 2. 구명보트 [C++]

무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 50kg]이고 구명보트의 무게 제한이 100kg이라면 2번째 사람과 4번째 사람은 같이 탈 수 있지만 1번째 사람과 3번째 사람의 무게의 합은 150kg이므로 구명보트의 무게 제한을 초과하여 같이 탈 수 없습니다. 구명보트를 최대한 적게 사용하여 모든 사람을 구출하려고 합니다. 접근 point Greedy Algorithm(탐욕법) 사용 정렬 사용 Greedy Algorithm(탐욕법) 이란? 최선의 선택을 고르는 것이라고 생각하면 쉽습니다! 즉, 매번 가장 최적의 선택을 하여 답을 도출해 내는 것..

프로그래머스 2023.06.16

프로그래머스 lvl 2. 올바른 괄호 [C++]

올바른 괄호 ex. "()()" 또는 "(())()" 핵심 point 홀수 일 경우는 올바른 괄호가 될 수 없다. 짝지어졌는지 묻는 문제는 항상 'stack' 혹은 'queue'를 사용한다. #include #include #include using namespace std; bool solution(string s) { bool answer = false; stack stk; if(s.length() % 2 == 0) { // 짝수 일 경우만 고려 for(int i = 0; i < s.length(); i++) { if(stk.empty()) { stk.push(s[i]); } else { // 스택은 Last In First Out if(s[i] == ')' && stk.top() == '(') { ..

프로그래머스 2023.06.14