코딩굼벵이
구르는 중
코딩굼벵이
  • 분류 전체보기 (116)
    • [C_C++]이론 공부 (17)
      • 알고리즘 (11)
      • 이론+STL (6)
    • [C_C++]코딩테스트 연습 (45)
      • [프로그래머스] level 1 (26)
      • [프로그래머스] level 2 (5)
      • [백준] 일반 문제 (12)
      • 기타 (2)
    • Solana (28)
      • Documentation (9)
      • Validator - 공부 (10)
      • Validator - 실행 (devnet & te.. (6)
      • 그 외 (3)
    • React (4)
    • Linux (2)
    • Javascript (2)
    • 블록체인 기반 핀테크 및 응용 SW 개발 (8)
      • React (1)
      • Javascript (3)
      • Solidity (3)
      • 프로젝트 (1)
    • 기타 (10)

블로그 메뉴

  • 🌟 깃허브
  • 🌿 Portfolio(2021)
  • 홈
  • 태그
  • 방명록

티스토리

최근 글

태그

  • grafana
  • Immer #ContextAPI
  • 밸리데이터
  • 솔라나
  • Hooks #React
  • 모니터링

인기 글

전체 방문자
오늘
어제
hELLO · Designed By 정상우.
코딩굼벵이

구르는 중

[C++] 프로그래머스 - 두 개 뽑아서 더하기 (벡터, sort, find)
[C_C++]코딩테스트 연습/[프로그래머스] level 1

[C++] 프로그래머스 - 두 개 뽑아서 더하기 (벡터, sort, find)

2021. 6. 24. 19:30
728x90

 

내 풀이

 

프로그래머스 문제 - 두 개 뽑아서 더하기

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;

vector<int> solution(vector<int> numbers) {
	vector<int> answer;
	vector<int>::iterator isFind;
	for (int i = 0; i < numbers.size()-1; i++) {
		for (int j = i+1; j < numbers.size(); j++) {
			isFind = find(answer.begin(), answer.end(), numbers[i] + numbers[j]);
			if (isFind == answer.end()) answer.push_back(numbers[i] + numbers[j]);
		}
	}
	sort(answer.begin(), answer.end());
	return answer;
}

1. 함수에 들어온 배열에서 0~(맨끝-1) 을 도는 i와 1~(맨끝) 을 도는 j를 두어 두개의 수끼리의 합을 모두 구하도록 포문을 두었다.

2. 포문을 돌면서 배열안의 두수끼리의 합이 answer에 있는지를 algorithm 헤더에 들어있는 find로 찾았다. 처음엔 auto로 두었고 설명에서 find의 반환값이 vector<int>::iterator 형식으로 나온다는 것을 알고 그렇게 고쳤다.

3. find가 값을 찾지 못해서 isFind가 answer.end가 되면 answer에 없다는 것이므로 추가한다.

4. answer을 sort로 정렬해 반환한다.

 

 


다른사람 풀이

#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이 중복을 허용하지 않는 점을 이용해 코드 길이를 더 줄이고, assign을 이용해 answer를 채웠다.

효율적인 것 같아 다음에 써보고 싶다.

'[C_C++]코딩테스트 연습 > [프로그래머스] level 1' 카테고리의 다른 글

[C++] 프로그래머스 - 모의고사  (0) 2021.07.02
[C++] 프로그래머스 - 폰켓몬 (set)  (0) 2021.06.29
[C++] 프로그래머스 - 키패드 누르기 (배열 노가다 + 지향할 풀이)  (0) 2021.06.25
[C++] 프로그래머스 - 징검다리 건너기  (0) 2021.06.24
[C++] 프로그래머스 - K번째 수 (벡터 공부)  (0) 2021.06.21
    '[C_C++]코딩테스트 연습/[프로그래머스] level 1' 카테고리의 다른 글
    • [C++] 프로그래머스 - 폰켓몬 (set)
    • [C++] 프로그래머스 - 키패드 누르기 (배열 노가다 + 지향할 풀이)
    • [C++] 프로그래머스 - 징검다리 건너기
    • [C++] 프로그래머스 - K번째 수 (벡터 공부)
    코딩굼벵이
    코딩굼벵이
    구르는 재주 연마 중

    티스토리툴바