반응형
▶ 문제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문이 간결하고 간지😎도 나긴 하지만 협업할 때는 좋지 않으려나?
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Lv.0-C] 원하는 문자열 찾기 (1) | 2025.06.10 |
---|---|
[Lv.1-Python] 3문제 풀이(예산, 이상한 문자 만들기, 삼총사) (3) | 2025.02.13 |
[기초 Lv.0-Python] 코딩 기초 트레이닝 Day3 - 연산 (0) | 2025.02.08 |
[기초 Lv.0-Python] 코딩 기초 트레이닝 Day2 - 출력, 연산 (0) | 2025.02.07 |
[기초 Lv.0-Python] 코딩 기초 트레이닝 Day1 - 출력 (0) | 2025.02.06 |
댓글