[프로그래머스] Lv1. 두 개 뽑아서 더하기

CHAEN·2022년 3월 15일
0

problem solving

목록 보기
12/33
post-thumbnail

문제

접근 방법

  • 리스트로부터 조합 추출
  • 조합을 모두 더해준 후 중복 제거, 정렬

이전에 C++로 풀었던 내용

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

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

나의 풀이

from itertools import combinations

def solution(numbers):
    answer = []
    
    comb = list(combinations(numbers, 2))
    
    for a, b in comb:
        answer.append(a+b)
        
    answer = list(sorted(set(answer)))
    
    # 이렇게 하면 케이스 2개에 대해서 틀린다
 #  answer = list(set(sorted(answer)))

    return answer

중복제거와 정렬 사이에 무슨 관계가 있길래 이 두 과정이 바뀌면 틀리는 케이스가 생기는걸까???
한참 고민했는데 설마설마 하면서 바꾸어봤더니 통과했다 ..

다른 사람의 풀이

def solution(numbers):
    answer = []
    for i in range(len(numbers)):
        for j in range(i+1, len(numbers)):
            answer.append(numbers[i] + numbers[j])
    return sorted(list(set(answer)))

그냥 이중반복문으로 푼 사람들이 많은 것 같다.
내가 C++로 풀었던 방식과 동일하다.

profile
공부중입니다

0개의 댓글

관련 채용 정보