(TIL) 20210602

2021. 6. 2. 11:46TIL(Today I learned)

반응형

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(Today I learned)' 카테고리의 다른 글

(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