ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3월 24일 TIL - if문 or
    TIL(Today I Learned) 2023. 3. 24. 21:31
    • 어떤 문제가 있었는지
    • 내가 시도해본 것들*(가장 중요/자세하게 적을것!)
    • 어떻게 해결했는지
    • 뭘 새롭게 알았는지*(가장 중요/자세하게 적을것!) 

    Q. 10미만의 자연수에서 3과 5의 배수를 구하면 3,5,6,9이다. 이들의 총합은 23이다. 1000미만의 자연수에서 3,5의 배수의 총합을 구하라.

    먼저 3과 5의 배수를 구하고자 고민을 했다 3과 5의 배수는 3이나 5로 나누었을 때 딱 떨어지는 숫자로 설정하였다. 그렇게 나온 첫번째 코드!

    result = 0
    
    for i in range(1, 1000):
        if i % 3 or 5 ==0:
            result += i
    print(result)

    그런데 최종값이 다르게 나온다. 왜일까? 추측하건데 여기서 문제가 될것이라 여겨지는 건 저 or 가 아닐까 싶다. 내가 짜고 싶었던 건 3의 배수이거나 5의 배수인 수를 찾는 것이다. 그렇기에 or를 넣어줬는데 i % 3 or 5 ==0 이다보니 i%3 과 5==0으로 조건이 분리되버린 것 같다. 그래서 다시 한번 코드를 명확하게 작성해주었다.

    result = 0
    
    for i in range(1, 1000):
        if i % 3 == 0 or i % 5 == 0:
            result += i
    print(result)

    이렇게 하니 정상적으로 작동이 되었다. 그런데 좀더 간단하게 할 수는 없을까 고민하다가 sum()이라는 함수를 발견하였다. sum()은 총 합을 구해주는 함수 이다. 그러면 이제 저 sum 안에 들어갈 숫자들을 판별해주는 작업을 간단하게 하면 되는데 파이썬 기초를 배우면서 한줄로 줄여쓰는 법을 배운게 생각 났다. 그래서 그 방법을 응용하여 코드를 짜보았다.

    a = sum([x for x in range(1000) if x%3==0 or x%5==0])
    print(a)

    for문으로 숫자를 만들어 내고 조건문을 걸어 해당되는 숫자들로 리스트를 만든 다음 그 리스트의 총 합을 구하는 변수 a가 탄생하였다. 사실 아직도 한줄로 줄이기는 많이 헷갈린다. 익숙해지기 위해 간단한 반복문, 조건문들을 발견하면 한줄로 줄이기를 도전해봐야겠다!

    댓글

Designed by Tistory.