(TIL) 20210602
2021. 6. 2. 11:46ㆍ회고
반응형
1.Facts(한 것)
- 학교 과제 완성 및 제출
- 프로그래머스 문제 풀기
2.Findings(배운 것)
과제는 마지막 날 하는 것이 가장 효율이 좋다
(정신적 효율 제외)
프로그래머스에서 두 개 뽑아서 더하기라는 문제를 풀었다.
문제에서 요구하는 답은 주어진 배열에서 두 가지를 뽑아서 더한 값들의 집합을 리턴하면 되는 것이다.
아래는 내가 짠 코드이다.
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
#include <stack>
using namespace std;
stack<int> temp;
vector<int> arr;
vector<int> solution(vector<int> numbers) {
vector<int> answer;
for(int i = 0; i < numbers.size(); i++) {
for(int j = i+1; j < numbers.size(); j++) {
arr.push_back(numbers[i] + numbers[j]);
}
}
sort(arr.begin(), arr.end());
for(int i = 0; i < arr.size(); i++) {
if(temp.empty()) {
temp.push(arr[i]);
} else {
if(temp.top() == arr[i]) {
continue;
} else {
temp.push(arr[i]);
}
}
}
while(!temp.empty()) {
answer.push_back(temp.top());
temp.pop();
}
sort(answer.begin(), answer.end());
for(int i = 0; i < answer.size(); i++) {
cout << answer[i];
}
return answer;
}
한눈에 보기에도 긴 코드이다. 배열에 넣은 후 스택을 활용해서 중복된 값을 제거하는 방법을 선택했다.
이렇게 문제를 풀고 분명히 더 나은 방법이 있을 거란 생각에 다른 풀이를 눌렀다.
그리고 나는 처음으로 set 컨테이너의 진짜 사용법을 깨우쳤다.
#include <string>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
vector<int> solution(vector<int> numbers) {
vector<int> answer;
set<int> st;
for(int i = 0;i<numbers.size();++i){
for(int j = i+1 ; j< numbers.size();++j){
st.insert(numbers[i] + numbers[j]);
}
}
answer.assign(st.begin(), st.end());
return answer;
}
이전까지만 하더라도 나는 set을 그저 키 값이 필요한 문제에서만 사용하는 줄 알았다.
하지만 set의 사용하는 이유는 중복을 허락하지 않는 점 때문이다.
쓰면서 든 생각이지만, 어떤 수의 부분집합 개념으로 생각하면 편할 것 같다.
자동정렬과, 중복을 허락하지 않는 이 두개의 장점.
자주 활용할 것 같다.
3.Feeling(느낀 점)
학교 수업을 듣고 있기 때문에, 생각보다 내가 자유롭게 사용할 수 있는 시간은 하루에 얼마 되지 않는다.
그렇기 때문에 아침시간을 잘 활용해야 할 것 같다.
지금은 일찍 일어나고, 아침을 먹는 것에 그치지만
더 나아가서 아침에 운동 혹은 공부를 실천해야겠다.
4.Affirmation(자기 선언)
- 내일은 오늘보다 나은 내가 될것이다.
반응형
'회고' 카테고리의 다른 글
(TIL) 20210604 (0) | 2021.06.04 |
---|---|
(TIL) 20210603 (0) | 2021.06.03 |
(TIL) 20210601 (0) | 2021.06.02 |
(TIL) 20210531 (0) | 2021.06.01 |
(TIL) 20210529 (0) | 2021.05.29 |