본 페이지는 C++ 독학을 위해 작성한 포스트입니다 풀이과정도 포함되어있지만 문법공부에 대한 비중이 있습니다.
(+ Java언어 내용도 포함되어있습니다. )
https://school.programmers.co.kr/learn/courses/30/lessons/12935?language=cpp
1.문제설명
문제 설명
정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
제한 조건
arr은 길이 1 이상인 배열입니다.인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
2. 문제해결 접근
- vector의 내림차순 정렬
- 마지막 인덱스 제거 (최소값이 올것이므로)
- 인덱스 제거했을 때, 빈 vector일 경우, -1을 요소로 추가
3.C++ 답안
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
vector<int> solution(vector<int> arr) {
vector<int> answer;
int temp;
if(arr.size() == 1){
answer.clear();
answer.push_back(-1);
}
else{
// 내림차순 정렬
sort(arr.rbegin(), arr.rend());
answer.resize(arr.size());
copy(arr.begin(), arr.end(), answer.begin());
temp = arr.front();
for(int i = 0; answer.size(); i++){
if(temp == answer[i])
{
// answer.pop_back();
answer.erase(answer.begin() + i);
break;
}
}
}
return answer;
}
테스트케이스는 통과하지만 채점하면 통과하지 않는 너란 코드 너무.. 싫다 ㅠ...
검색해보니 #include <algorithm>에 min_element라는함수가 있더라
vector내의 가장 작은 수를 반환해주는 함수인데,
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> arr) {
if(arr.size() == 1){
arr[0] = -1;
}else{
arr.erase(min_element(arr.begin(), arr.end()));
}
return arr;
}
아주아주 간결한 코드로 완성되었다.
4. C++ 문법 설명과 표현법
min_element, max_element
#include <algorithm>에 포함되어
구간 안에서 (배열, 벡터 등..) 최대, 최소값을 구하는 함수이다.
단, 주의할점은 값 자체를 리턴하는 것이 아닌, 그 값의 주소(index)를 리턴한다
https://m.blog.naver.com/kks227/220246803499
'알고리즘 > [프로그래머스]Lv.1' 카테고리의 다른 글
[프로그래머스]Lv1. 문자열 내림차순으로 배치하기 (0) | 2022.11.05 |
---|---|
[프로그래머스]Lv1. 음양 더하기 (0) | 2022.11.05 |
[프로그래머스]Lv1. x만큼 간격이 있는 n개의 숫자 (0) | 2022.11.04 |
[프로그래머스]Lv1. 제일 작은 수 제거하기<미제> (0) | 2022.11.02 |
[프로그래머스]Lv1. 서울에서 김서방 찾기 (0) | 2022.10.31 |