본문 바로가기
코딩테스트/프로그래머스

[기초 Lv.0-Python] 코딩 기초 트레이닝 Day4 - 연산, 조건문

by 요호유후 2025. 2. 10.
반응형

▶ 문제1 - n의 배수

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/181937

▶ 풀이1

def solution(num, n):
    return 1 if num % n == 0 else 0
★ 풀이노트
   · num이 n의 배수이려면 num을 n으로 나누었을 때 나머지가 0이여야 한다.
   · 즉, num % n == 0 일 때 num은 n의 배수라고 할 수 있다.

▶ 풀이2

def solution(num, n):
    if num % n == 0:
        return 1
    else:
        return 0
★ 풀이노트
   · 풀이1의 코드를 좀 더 정석? 으로 풀어보았다.
   · 풀이1이 간결하기는 하나, 협업을 위해서나 나중의 나를 위해서나 명확한 코드가 좋지 않을까?

다른사람 풀이 구경하면서 명언을 보았다. '한달 뒤의 나는 오늘의 나에게 완벽한 타인이다.'
한 달 뒤의 박유진이 풀이1을 보고 저게 뭐여? 할 수도 있다.

 


 

▶ 문제2 - 공배수

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/181936

▶ 풀이

def solution(number, n, m):
    if number % n == 0 and number % m == 0:
        return 1
    else:
        return 0
★ 풀이노트
   · 변수 number가 n의 배수이려면 number % n == 0 이여야 한다.
   · 변수 number가 m의 배수이려면 number % m == 0 이여야 한다.
   · 변수 number가 n과 m의 공배수이려면 위 2개의 조건이 모두 성립해야한다.
   · 2 개의 조건을 and 연산자로 묶어 주었다. and 연산자는 2개의 조건 모두 True여야지 True다.

else문 없이 return 0만 써줘도 될 것 같다.

 

def solution(number, n, m):
    if number % n == 0 and number % m == 0:
        return 1
    
    return 0

 


 

▶ 문제3 - 홀짝에 따라 다른 값 반환

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/181935

▶ 풀이

def solution(n):
    sum = 0
    
    if n % 2 == 0:
        for i in range(0, n+1, 2):
            sum += (i**2)
    else:
        for i in range(1, n+1, 2):
            sum += i
    
    return sum
★ 풀이노트
   · line 2 : 합을 구하기 위해 변수 sum 선언
   · line 4 : 짝수의 경우
   · line 5 : range(n) 함수는 n 미만의 값까지만 생성하기에 0~n+1까지 범위를 주었고
                 짝수를 뽑아야하기에 세번째 인자를 2를 주었다. 그럼 0부터 2의 간격으로 정수를 뽑아낸다.
   · line 6 : ** 연산자는 제곱을 의미한다. 제곱한 값을 변수 sum에 더해준다.
   · line 7 : 홀수의 경우
   · line 8 : line5와 동일하다. 홀수이기에 시작점을 1로 주었다.
   · line 9 : 변수 sum에 홀수값을 더해준다.

 


 

▶ 문제4 - 조건 문자열

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/181934

▶ 풀이

def solution(ineq, eq, n, m):
    if ineq == ">" and eq == "=":
        return 1 if n >= m else 0
    
    if ineq == ">" and eq == "!":
        return 1 if n > m else 0
    
    if ineq == "<" and eq == "=":
        return 1 if n <= m else 0
    
    if ineq == "<" and eq == "!":
        return 1 if n < m else 0
★ 풀이노트
   · 각각의 조건을 if문으로 풀어 쓰는게 제일 깔끔한 방법이라고 생각했다.
   · if-elif로 나누는것 보다는 if문 단독?으로 사용하는걸 선택했고
   · 각 조건문을 통해 연산을 하고 반환하도록 하였다. 

 

▣ 다른 사람 풀이

def solution(ineq, eq, n, m):
    return int(eval(str(n)+ineq+eq.replace('!', '')+str(m)))
★ 풀이노트
   · 아주 간결하게 작성된 코드이지만, 보안상 사용하지 않는 것이 좋다!

[eval()]

eval() 함수는 expression(식)을 문자열로 받아서 해당 식을 계산한 뒤 값을 반환해준다.
예를 들어, eval("1+2") 를 입력하면 3의 값으로 반환해준다.
위와 같이 어떤한 계산식이 와도 계산한 후 출력 값으로 반환해준다.
내장 함수도 실행시켜준다. 예) eval(max([1, 2, 3, 4])) → 출력 : 4

와? 세상에 이런 똑똑한 함수가 다 있냐? 하겠지만 여기에 숨겨진 함정이 있다!

예를 들어, eval(입력값) 사용자에게 입력값을 입력하게 한 후 사용자에게 출력값을 반환해줄 경우를 생각해보자!
사용자가 "__import__('os').system('ls /')" 와 같이 입력하게 되면 서버의 디렉토리 정보를 그대로 노출하게 되는 것이다!

참고 : https://bluese05.tistory.com/64

 


 

▶ 문제5 - flag에 따라 다른 값 반환하기

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/181933

▶ 풀이

def solution(a, b, flag):
    return a + b if flag else a - b
★ 풀이노트
   · flag가 True이면 a + b False면 a - b
   · if True: 라고 하면 무조건 성립되는 식이 된다.

 

 


 

😆 새로 알게 된 것들 😆

1. eval() - 양날의 검 같은... (문제4)

 

글을 정리하며...

if문의 사용에 대해 고민을 좀 해봤는데

if문만 쓸 때와 if-elif문으로 쓸 때 그리고 if-else문 대신 if문과 return의 조합으로 쓰는 것

그리고 if-else문을 한 줄로 사용하는 것

어떤게 가장 효율적이면서 가독성이 좋으면서 협업할 때 가장 적합한 코드일까?

학습하면서 if문만 사용, if-return의 조합을 쓰는게 가독성이 좋다는 얘기를 몇 번 듣긴 했는데

아직까지는 잘 모르겠다... 계속 쓰다보면 알겠지?

한 줄 if-else문이 간결하고 간지😎도 나긴 하지만 협업할 때는 좋지 않으려나?

 

 

반응형

댓글