Level1
문제
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.제한 조건
- arr은 길이 1 이상인 배열입니다.
- 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
입출력 예
arr | return |
[4,3,2,1] | [4,3,2] |
[10] | [-1] |
풀이
문제의 설명에 빠진 부분이 있어서 조금 헤맸다.
설명에서 값만 제거하고 리턴하라거나 그대로 리턴해야한다던가의 제한조건같은게 없어서
풀이할때 sort를 이용해서 가장 마지막 값만 제거해서 풀었다.
위에 주어진 문제만 통과하고 테스트케이스는 전부 틀려서 당황스러웠다.
처음 풀이에는 sort문제라는것은 인지 못하고 제일 작은 수가 여러개 인경우의 예외처리를 하고 풀었다.
그래도 여전히 전부 틀리다고 나왔다.
다음 풀이에는 소스코드 처럼 주어진 배열내에서 제일 작은수만 넣지 않고 풀어서 해결했다.
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
bool compare(int a, int b);
vector<int> solution(vector<int> arr) {
vector<int> answer;
if ( arr.size() == 1){
answer.push_back(-1);
return answer;
}
vector<int> dummy = arr;
sort(arr.begin(), arr.end(), compare);
int iMin = arr[arr.size()-1];
for( int i = 0 ; i < dummy.size(); ++i ){
if ( iMin != dummy[i]){
answer.push_back(dummy[i]);
}
}
return answer;
}
bool compare(int a, int b){
return a>b;
}
다른사람의 풀이
min_element라는 함수로 접근해서 간단한 풀이
#include <algorithm>
#include <vector>
using namespace std;
vector<int> solution(vector<int> arr) {
if (arr.size() == 1) {
return { -1 };
}
arr.erase(std::min_element(arr.begin(), arr.end()));
return arr;
}
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12935
'개발 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/C++] 명예의전당(1) (0) | 2022.12.17 |
---|---|
[프로그래머스/C++] 과일장수 (0) | 2022.12.16 |
[프로그래머스/C++] 로또의 최고 순위와 최저순위 (0) | 2022.12.15 |
[프로그래머스/C++] 콜라문제 (0) | 2022.12.14 |
[프로그래머스/C++] 크레인 인형 뽑기 (0) | 2022.12.13 |