본문 바로가기
Algorithm/구현

[프로그래머스 lv 1] 두 개 뽑아서 하기

by HANNI하니 2023. 5. 21.

사용 언어 - Python3

문제 - 두 개 뽑아서 더하기

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

정답

단순 구현 (정답 맞춘 여부 O)

첫 번째 시도 => 테스트4,5 실패

1. numbers 리스트 원소들을 한개씩 확인하면서 두 값이 다르거나, 같더라도 원소 위치가 다르면 answer에 append 했다.

2. 모든 경우의 수를 다 더해준 answer를 set(중복제거&오름차순)하여 list로 변환후 출력

=> set 때문에 시간복잡도가 높아져 numbers 리스트가 큰 경우에 오류가 발생한 것 같다.

def solution(numbers):
    answer = []
    
    for i in range(0,len(numbers)):
        for j in range(0,len(numbers)):
            if numbers[i] != numbers[j] or (numbers[i] == numbers[j] and i != j):
                answer.append(numbers[i] + numbers[j])
    
    result = list(set(answer)) # 중복제거 , 오름차순 
    
    return result

 

2번째 시도 => 정답!

1. 애초에 answer를 append할 때 answer 안에 없는 경우에만 append하면서 중복을 제거했다.

2. answer.sort() 로 오름차순 정렬해주기

def solution(numbers):
    answer = []
    
    for i in range(0,len(numbers)):
        for j in range(0,len(numbers)):
            if numbers[i] != numbers[j] or (numbers[i] == numbers[j] and i != j):
                n = numbers[i] + numbers[j]
                if n not in answer: # 중복제거
                    answer.append(numbers[i] + numbers[j])

    answer.sort() # 오름차순 정렬
    
    return answer

 

레퍼런스

  • 정답 깃허브
 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

 

댓글