[プログラマー]Summer/Winter Coding(~218)>小数点の作成
8602 ワード
最近解決された問題の中には少数に関連する問題がたくさんある.
もう一度これを作ろうかと思ったら小数のコードを作るのを忘れないでください
しかし一般的に小数を作るときに終わるのではなく、この問題のように小数を利用します.
この問題では,小数アルゴリズムよりも,数値配列の3つの組合せをどのように作成するかが重要である…!
補助配列順による組み合わせを利用しました
5つの数字の配列の中から3つの数字の組み合わせを選択すると、以下の手順に従います.
-0と1で構成する必要があります.0は前でなければなりません.
-
int subPermutation = [ 0, 0, 1, 1, 1 ];
本来next permutationと書くにはsortが必要ですが、ここでは、最初の配列の作成から0を入れて1を埋め、単独でsortを行わないでください.
学識
arrayとvectorを混合して使用します.最初の解関数の因子はベクトルです
この時間はあまり悩んでいないようなので、違いを見てみました.
作成
// 소수 만들기 https://programmers.co.kr/learn/courses/30/lessons/12977
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
bool IsPrimeNumber(int num) {
for(int i = 2; i <= num/2; i++) {
if(num % i == 0) {
return false;
}
}
return true;
}
int solution(vector<int> nums) {
// 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수
int answer = 0;
int numsSize = nums.size();
// 1. 조합을 위한 보조 순열 만들기
int subPermutation[numsSize];
for(int i=0; i<numsSize-3; i++) {
subPermutation[i] = 0;
}
for(int i=numsSize-3; i<numsSize; i++) {
subPermutation[i] = 1;
}
// 2. 소수의 개수 판단
do {
int sum = 0;
for(int i=0; i<numsSize; i++) {
// elem이 1이면 sum에 더해보고 소수이면 answer++
if(subPermutation[i] == 1) {
sum += nums[i];
}
}
if(IsPrimeNumber(sum)) {
answer++;
}
} while(next_permutation(subPermutation, subPermutation + nums.size()));
return answer;
}
Reference
この問題について([プログラマー]Summer/Winter Coding(~218)>小数点の作成), 我々は、より多くの情報をここで見つけました https://velog.io/@minjujuu/프로그래머스-SummerWinter-Coding2018-소수-만들기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol