Notice
Recent Posts
Recent Comments
Link
bdfgdfg
[레벨1] 모의고사 본문
반응형
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int a[] = {1,2,3,4,5,1,2,3,4,5};
int b[] = {2,1,2,3,2,4,2,5};
int c[] = {3,3,1,1,2,2,4,4,5,5};
vector<int> solution(vector<int> answers) {
vector<int> answer;
vector<int> stu1,stu2,stu3;
int arr[3] = {};
int i,s1,s2,s3 = 0;
int len = answers.size(); //
stu1.reserve(len);
stu2.reserve(len);
stu3.reserve(len);
for(i = 0; i < len; ++i)
{
if(s1 >= 10)
s1 = 0;
if(s2 >= 8)
s2 = 0;
if(s3 >= 10)
s3 = 0;
stu1.push_back(a[s1++]);
stu2.push_back(b[s2++]);
stu3.push_back(c[s3++]);
}
for(i = 0; i < len; ++i)
{
if(stu1[i] == answers[i])
arr[0]++;
if(stu2[i] == answers[i])
arr[1]++;
if(stu3[i] == answers[i])
arr[2]++;
}
int maxValue = max({arr[0],arr[1],arr[2]});
for(i = 0; i < 3; ++i)
{
if(arr[i] == maxValue)
answer.push_back(i + 1);
}
sort(answer.begin(), answer.end());
return answer;
}
문제는 쉬운편이었다고 생각한다. 하지만 과연 잘 풀었는지가 궁금한데. 다른 사람의 코드를 보니.
나처럼 정답지의 길이만큼 학생들의 배열을 채워주고 다시 맞는지 체크하는게 아니라.
vector<int> students(3);
for(int i=0; i<answers.size(); i++) {
if(answers[i] == a[i%a.size()]) students[0]++;
if(answers[i] == b[i%b.size()]) students[1]++;
if(answers[i] == c[i%c.size()]) students[2]++;
}
간단하게 위와 같이 정의함. 즉
vector<int> a = {1,2,3,4,5};
vector<int> b = {2,1,2,3,2,4,2,5};
vector<int> c = {3,3,1,1,2,2,4,4,5,5};
여기서. answers 길이만큼. 각각a,b,c의 요소들을 반복문 i % size로 접근하여 맞는지를 체크.
나보다 메모리 + 시간복잡도도 좋은 코드. 그리고 나는 어차피 학생들을 하나로 관리한게 아닌 따로 관리했기에
max({arr[0],arr[1],arr[2]}) 식으로 쉽게 구할 수 있지만. 만약 하나의 배열(다른 STL 컨테이너도 가능)에서 최소,최대값을 구하는 것이라면 (물론 반복문을 써도 되지만) algorithm헤더에 구현된 min_element(),max_element함수를 사용.
int main(void)
{
vector<int> arr;
for (int i = 0; i < 10; ++i)
{
arr.push_back(rand());
}
auto maxIter = max_element(arr.begin(), arr.end());
int maxValue = *max_element(arr.begin(), arr.end());
cout << *maxIter << " " << maxValue;
return 0;
}
max,min_element함수는 iterator를 반환.
모든 컨테이너에대해서 처음부터 끝까지 돌아 선형 시간복잡도( O(N) )를 가진다고 한다. -> 물론 범위를 지정할 수 있다
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[레벨1] 문자열 다루기 기본 (0) | 2021.08.14 |
---|---|
[레벨1] 행렬의 덧셈 (0) | 2021.08.13 |
[레벨1] 체육복 (0) | 2021.08.10 |
[레벨1] 완주하지 못한 선수 (0) | 2021.08.09 |
[레벨1] 숫자 문자열과 영단어 (0) | 2021.08.08 |
Comments