Today I Learned/Python 문제풀이

프로그래머스 lv1. 없는 숫자 더하기 (set 사용)

하나719 2023. 8. 11. 18:32
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/86051

 

프로그래머스

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

programmers.co.kr

문제 요약

0 ~ 9 사이의 정수가 들어있는 numbers 리스트에서 0 ~ 9 중에 없는 숫자를 더해서 출력하기

 

문제풀이 아이디어

  • numbers 리스트는 중복된 값이 없다고 하니까, 같은 값이 2번 있을 수 없다는 점을 파악
  • 0 ~ 9 까지 들어있는 set를 만들고, 이 set가 돌면서 numbers 리스트에 있는 값을 지워버리고 set에 남아있는 값을 합치자
    • set 사용한 이유 
      • 중복 없는 값으로 0~9까지 수로 이루어진 집합을 만들기 위해 
      • set에서 사용가능한 discard() 함수를 사용하기 위해 -> remove는 없는 값을 지우려할 때 에러가 발생하지만, discard는 에러가 발생하지 않음 

list에서 없는 값을 지우려할때 에러 발생
set 에서는 없는 값을 discard했을 때 에러 발생 X

나의 문제 풀이 

def solution(numbers):
    all = set(range(10))
    for i in numbers:
        all.discard(i)
    return sum(all)

 

 

다른 사람 풀이

def solution(numbers):
    return 45 - sum(numbers)

 

문제풀고 매우 뿌듯했는데,,,, 

for문을 돌면서 하나하나 비교해서 버릴필요 없이 0~9 전체 합을 구한 뒤 , numbers 에 있는 값의 합을 빼버리면 아주 간단했다 ^^..

 

회고

계속 하나하나 비교하는 형태로 푸는게 1차적으로 떠오르는데, 수학적으로 어떻게 간단하게 풀어낼 수 있을지 고민해보면서 풀어야할것 같다. 그치만, 단순하게 list로 구현하지 않고 set로 구현해서 에러가 발생하지 않는 함수를 적절하게 사용해보려고 한 점은 잘했다고 생각한다. 

반응형