2023. 10. 3. 17:22, 알고리즘/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/120862
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> numbers) {
int answer = 0;
sort(numbers.begin(),numbers.end());
if(numbers.size()==2){
answer=numbers[0]*numbers[1];
}
else{
int tmp1=numbers[numbers.size()-1]*numbers[numbers.size()-2];
int tmp2=numbers[0]*numbers[1];
answer=max(tmp1,tmp2);
}
return answer;
}
위의 풀이의 경우 내가 작성한 코드이다.
풀이를 생각해보자면, 정렬을 한 뒤에, 사이즈가 2라면, 두개의 원소만 존재하므로 그냥 두 원소를 곱한걸 출력하고, 만약 2개가 아니라면, 즉 3개 이상이라면 가장 작은 원소 두개의 곱이거나, 혹은 가장 큰 원소 두개의 곱 중에서, 더 큰 값을 answer 로 리턴 하면 되는 형태의 코드인데, 다른 사람의 풀이를 보니까 이와 같은 형태의 코드이면서 더욱 간결하고 이해하기 쉽게, 그리고 불필요한 if else 판별을 사용하지 않는 코드를 보게 되어서 여기에 첨부한다.
numbers.size()==2 이더라도, 가장 작은 원소 두개이거나, 혹은 numbers.size()-1, numbers.size()-2의 위치의 numbers 배열에 접근하는건 결국 같은 값을 나타내기 때문에 위의 코드처럼 if , else로 구분지어서 코드를 작성해줄 필요가 없는 것이었다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> numbers) {
sort(numbers.begin(),numbers.end());
int n = numbers.size();
return max(numbers[n-1]*numbers[n-2],numbers[0]*numbers[1]);
}
이렇게 작성하는것이 훨씬 갈끔하고 이해하기 쉽고, 원하는 형태의 프로그램을 제공하는 아주 멋진 코드이다. 이런 식으로 생각해보도록 노력하자. 이런 식의 코드를 짜기 위해서 노력해보도록 하자.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Lv 0. 숨어있는 숫자의 덧셈 (2) (0) | 2023.10.06 |
---|---|
Lv 0. 다항식 더하기 *다시 풀어보기* (0) | 2023.10.06 |
Lv 0. 캐릭터의 좌표 (0) | 2023.10.03 |
Lv 0. 직사각형 넓이 구하기. (0) | 2023.10.03 |
Lv 0. 머쓱이보다 키 큰 사람 (0) | 2023.10.01 |
Comments, Trackbacks