[プログラマー]スター数列
回答日:2021年05月19日
質問する
質問する
質問リンク:リンクテキスト
アクセスと解析
以下のすべての条件を満たす数列xは、スター数列として定義される.
1.xの長さが2より大きい偶数.(空の列は許可されていません.)
2.x長が2 nの場合、n個の集合{x[0]、x[1]、{x[2]、{x[3]}、...、{x[2 n−2],x[2 n−1]}の交差における要素数は1より大きい.
3. x[0] != x[1], x[2] != x[3], ..., x[2n-2] != x[2n-1].
以上提案したスター数列となる条件から,2次条件で問題を解決すべきであると直感的に考えられる.
交差する要素は1つ以上存在しなければならず、これらの要素をどのように設定すれば最終的にはスター数列の長さも異なるので、単純な方法は、与えられた数列に現れる数字の周波数を利用してスター数列の条件をチェックすればよい.
これを実現するために,数列に存在する数の個数を計算し,存在する数を交差する要素に設定して,スター数列の条件が満たされているかどうかを調べた.
このとき、トリミング可能なハウジングが存在する.
例えば、与えられた数列[1,2,1,3,4,1,3]において、交差要素が1の場合、[1,2,1,3,4,1,3]には長さ8の星数列が生成され、交差要素が3であると考えると、どんなにうまくやっても最大長4の星数列しか生成されない.そのため、このような状況ではスターの数列条件をチェックする必要はありません.
コード#コード# #include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(std::vector<int> a) {
int answer = -1;
vector<int> counter(a.size() + 1, 0); // a에 있는 수를 저장하기 위해 초기화
for (int i = 0; i < a.size(); i++) {
counter[a[i]]++; // a에 있는 수들의 갯수 저장
}
for (int i = 0; i < counter.size(); i++) {
if (!counter[i]) continue; // 수열에 존재하지 않는 숫자
if (counter[i] <= answer) continue; // 체크안해봐도 되는 케이스
int cnt = 0;
for (int j = 0; j < a.size() - 1; ) {
if ((a[j] == i || a[j + 1] == i) && (a[j] != a[j + 1])) { // 스타수열 조건을 만족하는 경우
cnt++; // 스타수열 길이 계산
j += 2;
} else {
j += 1;
}
}
answer = max(answer, cnt);
}
return answer * 2; // 길이는 2배해서 return
}
結果
フィードバック
問題を見るときは簡単そうに見えるので、簡単に解決したいです.どうして毎回クイズの时に初めて思ったのはGRADYですか...
しかし、サイトを参考にしてみると、思った以上に考えなければならないこともあれば、よく考えなければならないこともある.本当に頭のいい人がたくさんいます
問題を解くときは、与えられたテストケースをより深く考え、例外ケースをすばやく思い出すために、より多くの練習が必要になる可能性があります.
リファレンスサイト
リンクテキスト
Reference
この問題について([プログラマー]スター数列), 我々は、より多くの情報をここで見つけました
https://velog.io/@bestcoders/프로그래머스-스타-수열-by-supin2
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
以下のすべての条件を満たす数列xは、スター数列として定義される.
1.xの長さが2より大きい偶数.(空の列は許可されていません.)
2.x長が2 nの場合、n個の集合{x[0]、x[1]、{x[2]、{x[3]}、...、{x[2 n−2],x[2 n−1]}の交差における要素数は1より大きい.
3. x[0] != x[1], x[2] != x[3], ..., x[2n-2] != x[2n-1].
以上提案したスター数列となる条件から,2次条件で問題を解決すべきであると直感的に考えられる.
交差する要素は1つ以上存在しなければならず、これらの要素をどのように設定すれば最終的にはスター数列の長さも異なるので、単純な方法は、与えられた数列に現れる数字の周波数を利用してスター数列の条件をチェックすればよい.
これを実現するために,数列に存在する数の個数を計算し,存在する数を交差する要素に設定して,スター数列の条件が満たされているかどうかを調べた.
このとき、トリミング可能なハウジングが存在する.
例えば、与えられた数列[1,2,1,3,4,1,3]において、交差要素が1の場合、[1,2,1,3,4,1,3]には長さ8の星数列が生成され、交差要素が3であると考えると、どんなにうまくやっても最大長4の星数列しか生成されない.そのため、このような状況ではスターの数列条件をチェックする必要はありません.
コード#コード# #include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(std::vector<int> a) {
int answer = -1;
vector<int> counter(a.size() + 1, 0); // a에 있는 수를 저장하기 위해 초기화
for (int i = 0; i < a.size(); i++) {
counter[a[i]]++; // a에 있는 수들의 갯수 저장
}
for (int i = 0; i < counter.size(); i++) {
if (!counter[i]) continue; // 수열에 존재하지 않는 숫자
if (counter[i] <= answer) continue; // 체크안해봐도 되는 케이스
int cnt = 0;
for (int j = 0; j < a.size() - 1; ) {
if ((a[j] == i || a[j + 1] == i) && (a[j] != a[j + 1])) { // 스타수열 조건을 만족하는 경우
cnt++; // 스타수열 길이 계산
j += 2;
} else {
j += 1;
}
}
answer = max(answer, cnt);
}
return answer * 2; // 길이는 2배해서 return
}
結果
フィードバック
問題を見るときは簡単そうに見えるので、簡単に解決したいです.どうして毎回クイズの时に初めて思ったのはGRADYですか...
しかし、サイトを参考にしてみると、思った以上に考えなければならないこともあれば、よく考えなければならないこともある.本当に頭のいい人がたくさんいます
問題を解くときは、与えられたテストケースをより深く考え、例外ケースをすばやく思い出すために、より多くの練習が必要になる可能性があります.
リファレンスサイト
リンクテキスト
Reference
この問題について([プログラマー]スター数列), 我々は、より多くの情報をここで見つけました
https://velog.io/@bestcoders/프로그래머스-스타-수열-by-supin2
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(std::vector<int> a) {
int answer = -1;
vector<int> counter(a.size() + 1, 0); // a에 있는 수를 저장하기 위해 초기화
for (int i = 0; i < a.size(); i++) {
counter[a[i]]++; // a에 있는 수들의 갯수 저장
}
for (int i = 0; i < counter.size(); i++) {
if (!counter[i]) continue; // 수열에 존재하지 않는 숫자
if (counter[i] <= answer) continue; // 체크안해봐도 되는 케이스
int cnt = 0;
for (int j = 0; j < a.size() - 1; ) {
if ((a[j] == i || a[j + 1] == i) && (a[j] != a[j + 1])) { // 스타수열 조건을 만족하는 경우
cnt++; // 스타수열 길이 계산
j += 2;
} else {
j += 1;
}
}
answer = max(answer, cnt);
}
return answer * 2; // 길이는 2배해서 return
}
フィードバック
問題を見るときは簡単そうに見えるので、簡単に解決したいです.どうして毎回クイズの时に初めて思ったのはGRADYですか...
しかし、サイトを参考にしてみると、思った以上に考えなければならないこともあれば、よく考えなければならないこともある.本当に頭のいい人がたくさんいます
問題を解くときは、与えられたテストケースをより深く考え、例外ケースをすばやく思い出すために、より多くの練習が必要になる可能性があります.
リファレンスサイト
リンクテキスト
Reference
この問題について([プログラマー]スター数列), 我々は、より多くの情報をここで見つけました
https://velog.io/@bestcoders/프로그래머스-스타-수열-by-supin2
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
リンクテキスト
Reference
この問題について([プログラマー]スター数列), 我々は、より多くの情報をここで見つけました https://velog.io/@bestcoders/프로그래머스-스타-수열-by-supin2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol