팩토리얼.. 학교 다닐 때,
흘려 들었던 것 같은데 기억이 나서 다행이었다.
면접 때, 팩토리얼을 구현해 보라고 해서
그냥 생각나는대로 풀었는데
지금 집에와서 해보니까 공식이 틀렸다.
def fac(n):
kk = []
for a in range(1, n):
kk.append(a)
bb = 0
for ac in kk:
if ac != 1:
bb = bb + (ac * (ac - 1))
return bb
print(fac(5))
이렇게 풀었는데,
결과가 20으로 나온다.
range는 1부터 n "이전" 까지 반복이라서 리스트에
1, 2, 3, 4 까지 밖에 안들어갔다.
그리고 (ac * (ac - 1)) 이 부분도 잘못 적었다.
후.. 뭔가 긴장해서..
빨리 코드를 작성해서 보여줘야한다는 부담감이 생겼었다.
적어도 제대로 값이 떨어질지 계산을 해봐야했는데
뭔가 머릿속이 새하얘져서
뇌로 생각한게 아니라 손가락이 코딩을했다ㅋㅋㅋㅋ..ㅠㅠ
우선, 위에 코드를 그래도 수정해보면 아래와 같다.
def fac(n):
kk = []
for a in range(1, n + 1):
kk.append(a)
bb = 1
for ac in kk:
if ac != 1:
bb = bb * ac
return bb
print(fac(5))
근데.. 사실..
어차피 1 * 2 * 3 * 4 * 5 아닌가..;;
def fac(n):
j = 1
for k in range(1, n+1):
j = j * k
return j
print(fac(5))
ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
면접장에서 얼마나 떨었으면.. 하;;
진짜 스스로 얼탱이가 없어가지고..
집에와서 문제 푼거 확인하려고 컴퓨터키면서
"팩토리얼이라~~ 맞아 그런게 있었지~~"
"테스트 해볼...?? 응..? 잠깐만.."
ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
이런 의식의 흐름이었다.
그 다음부터는 뭐.. 그냥 헛웃음만 나왔다ㅋㅋㅋ
그래도 좋은 경험 했다. (긁적긁적)
앞으로 라이브 코딩을 하게 되면
마음 편하게 먹고
시간이 좀 걸리더라도 꼼꼼하게 풀어야겠다.
앞에 면접관들이 앉아있는 상황에서
코딩을 하려니까..
뭔가 되게 부끄럽고 민망하고
아무튼 엄청 부담스러웠다ㄷㄷ
원래 의도한 정답은 재귀를 사용하는 것이라고 한다.
내가 아는 재귀는 스스로를 계속 반복하는 건데.
재귀하면 그냥 while문 밖에 안떠오른다.
소켓할 때,
계속 연결을 유지해야해서 while문을 사용했는데,
이게 재귀라고 말하는 걸로 알고 있다.
내가 아는건 특정 조건일 때를 제외하고는
계속해서 무한 반복하는 것을 재귀라고 알고 있지만.
아마 또 검색해서 찾아보면 정확한 의미는 다를거다.
내가 아는건 대부분 경험에 의존한 것이다 보니..
나는 암기로 공부하는 것 보다는
그냥 손에 익히는걸 좋아해서
아마 정확한 개념과는 다를 수도 있다.
사실 파이썬 처음할 때, 다 공부했었는데 그냥 다 까먹었다.
안쓰니까.. 그래서 나는 암기로 하면 안되겠다고 생각하고
경험을 쌓는 방식으로 손가락과 무의식에 지식을 때려 박고 있다.
이게 맞는건지 아닌건지는 잘 모르겠다.
그래도 이해하지 못한 채, 달달달 암기하는 것 보다는
남들보다 느리더라도 천천히 확실하게 하나하나 머릿속에 넣어두면서
지식을 쌓아갈 예정이다.
아무튼! 일단은 재귀가 위의 내 생각이라고 판단하고
문제를 다시 풀어봐야겠다.
def fac(n):
count = 1
result = 1
while True:
if count != n:
count += 1
result = result * count
else:
break
return result
print(fac(5))
이번에는 금방 풀었다.
뭐.. 어차피 이거 답 아닐거다.
곰곰히 생각해보니까
재귀"함수" 라고 했었었다.
아마 함수 스스로를 계속 반복 돌리는 거겠지..
이제 구글에 검색해보자~
재귀함수재귀 함수란 어떤 함수에서 자신을 다시 호출하여 작업을 수행하는 방식의 함수를 의미한다. 다른 말로는 재귀 호출, 되부름이라고 부르기도 하며, 반복문을 사용하는 코드는 항상 재귀 함수를 통해 구현하는 것이 가능하며 그 반대도 가능하다.재귀 함수를 작성할 때는 함수 내에서 다시 자신을 호출한 후 그 함수가 끝날 때까지 함수 호출 이후의 명령문이 수행되지 않는다는 사실과 종료 조건이 꼭 포함되어야 한다는 부분을 인지하고 작성하면 무한 루프를 방지할 수 있습니다. |
정답은 아래와 같다!
def factorial(n):
if n == 1:
return 1
return n * factorial(n - 1)
print(factorial(5))
와.. 이런식으로도 풀 수 있구나
확실히 코드가 더 간결하고 멋있어 보인다.
리턴 값으로 함수를 다시 사용하는구나..!
곰곰히 생각해보니까..
예전에 분명 이러한 사용 방법을 공부했었는데,
잘 쓰질 않으니까 까먹고 있었다.....
평소에 이러한 다양한 방법을
사용하는 습관을 어느정도는 들여야 할 것 같다!
공부는 정말.. 해도해도 끝이 없는 것 같다.
시간이 벌써 오후 7시다.
후.. 계속 하고싶지만,
일단 부동산 업무 마저 보고와서
글을 더 적어야겠다.
저번에 말했던 1가구 2주택 문제인데,
이번에 업체랑 얘기해보고 계산 때려보니까
건물을 밀고 매매하는게 세금이 덜 나간다.
원래는 40%정도가 세금으로 나가야 하는데,
30% 정도가 세금으로 나가게 된다.
이래도 부담스러운 세금이지만...
에효.. 어쨌든 정말 가족같은 이모를 위해서 알아보는 거니까
조금 더 알아보러 다녀야겠다.
정말.. 이번 정부는.. 하... 여기까지..;;
아무튼!
일하면서 간간히 파이썬에서 할 수 있는
개발 방법에 대해
다시 한 번 검색해봐야겠다.
그래도..
내일 또 면접보러 가야해서
너무 무리하지는 말아야겠다.
흐.. 당분간 블로그에 쓸 내용이 생겼네 아주 좋아~!
1~2주 정도 파이썬 기초 공부 다시 하고.
프로그래머스 문제도 풀어봐야겠다.
협업 프로젝트로 해야하고..
음.. 할게 많네..
아! 그래도 이번 면접을 통해 앞으로 면접 준비 감을 잡았다.
나는 프레임워크나 라이브러리 이런거 물어볼 줄 알았는데...
내가 했던 프로젝트나 뭐 그런거 물어볼 줄 알았다.
그냥 기초에 대한거나 이런 라이브 코딩을 할 줄은 몰랐다.
앞으로 면접 볼 때,
기초에 대한 공부랑 코테 조금 풀어보고 가면
확실히 도움이 될 것 같다.
(긁적긁적.. 면접 질문 좀 보고 갈걸..)
뭐 지나가 버린건 지나가 버린거니까 털어버리자.
이런 실수들은 기억하고 다음부터 안하면 된다.
오늘도 의식의 흐름대로 글을 적고 마친다.
'아카이브 > 일기' 카테고리의 다른 글
| 298일차 리액트(React) 애니애니(AnyAni) - 배포 (0) | 2021.10.23 |
|---|---|
| 어썸잇 면접 후기 (0) | 2021.10.22 |
| 297일차 리액트(React) 애니애니(AnyAni) - 추천 페이지 (0) | 2021.10.22 |
| 딱 1군데만 더 면접 볼까..? (0) | 2021.10.21 |
| 아이엠에스모빌리티 면접 후기 (0) | 2021.10.21 |
| 296일차 리액트(React) 애니애니(AnyAni) - 메인 페이지 (0) | 2021.10.21 |
| 반성하자 (0) | 2021.10.21 |
| 면접 준비 - 간단한 차량 앱 개발 (0) | 2021.10.21 |