1~3번 문제는 큰 어려움 없이 풀었기에 아래에 부족하나마 답변 코드를 넣어두고,
빨리 풀기는 풀었으나 코드의 메커니즘이 만족스럽지 않아 두번 수정한 4번 문제를 먼저 자세히 기술하고자 한다.
1. 먼저 생각나는대로 코드를 작성했다.
(시간제한을 둔 코딩테스트 방식으로 진행되어 테스트 통과 코드작성을 우선순위에 두었다.)
def solution(id_pw, db):
answer = ''
db_id_list = []
for i in range(len(db)):
db_id_list.append(db[i][0])
for i in range(len(db)):
if id_pw[0] not in db_id_list:
answer = "fail"
elif id_pw[0] == db[i][0] and id_pw[1] != db[i][1]:
answer = "wrong pw"
elif id_pw[0] == db[i][0] and id_pw[1] == db[i][1]:
answer = "login"
return answer
2. 테스트 통과 후 내가 작성한 코드를 돌아보며 개선해야 될 부분들을 체크했다.
개선사항에 대한 생각을 정리한 뒤 다른 사람들의 답변을 보며, 다른 개선방식도 있을까를 고민해봤다.
- 그 과정에서
바다코끼리 연산자(walrus operator)
에 대해 알게 되었다. (링크)
def solution(id_pw, db):
if db_pw := dict(db).get(id_pw[0]):
return "login" if db_pw == id_pw[1] else "wrong pw"
return "fail"
3. 1차적으로 코드를 개선했다.
id_pw_checklist
에 담아 pw 검증에 사용했다. def solution(id_pw, db):
answer = "fail"
id_pw_checklist = []
for i in range(len(db)):
if id_pw[0] == db[i][0]:
id_pw_checklist = db[i]
if len(id_pw_checklist) == 2:
if id_pw[1] == id_pw_checklist[1]:
answer = "login"
else:
answer = "wrong pw"
return answer
4. 벨로그에 글을 쓰다가 2차적으로 코드를 개선했다.
리팩토링을 왜 해야 하는지, 어떻게 하는지를 부족하지만 경험해본 좋은 과정이었다.
def solution(id_pw, db):
answer = "fail"
for i in range(len(db)):
if id_pw[0] == db[i][0]:
if id_pw[1] == db[i][1]:
answer = "login"
else:
answer = "wrong pw"
return answer
++ 3번 과정에서 db의 값을 id_pw_checklist에 담는 것이 보안상 위험하지는 않을까? 하는 궁금증이 있어 튜터님께 질문을 드렸다.
def solution(angle):
answer = 0
if angle < 90:
answer = 1
elif angle == 90:
answer = 2
elif angle < 180:
answer = 3
else:
answer = 4
return answer
import math
def solution(price):
answer = 0
if price < 100000:
answer = price
elif price < 300000:
answer = math.trunc(price*0.95)
elif price < 500000:
answer = math.trunc(price*0.9)
else:
answer = math.trunc(price*0.8)
return answer
def solution(order):
num_list = list(map(int, str(order)))
answer = 0
for num in num_list:
if num % 3 == 0 and num != 0:
answer += 1
return answer
저도 풀고 성현님과 비교해보겠습니다!