면접 문제 - 팩토리얼 구현!

2021. 10. 21. 18:59·아카이브/일기
반응형

팩토리얼.. 학교 다닐 때,
흘려 들었던 것 같은데 기억이 나서 다행이었다.
면접 때, 팩토리얼을 구현해 보라고 해서
그냥 생각나는대로 풀었는데
지금 집에와서 해보니까 공식이 틀렸다.

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
'아카이브/일기' 카테고리의 다른 글
  • 297일차 리액트(React) 애니애니(AnyAni) - 추천 페이지
  • 딱 1군데만 더 면접 볼까..?
  • 아이엠에스모빌리티 면접 후기
  • 296일차 리액트(React) 애니애니(AnyAni) - 메인 페이지
권퓨터
권퓨터
만드는 걸 좋아하는 개발자의 기록. 코드든 글이든, 일단 만들어 봅니다.
  • 권퓨터
    권퓨터: Kwonputer
    권퓨터
  • 티스토리 홈 관리자
  • 전체
    오늘
    어제
    • 분류 전체보기 (557) N
      • 개발 (56)
        • 프로젝트 (5)
        • 모바일 (44)
        • 프론트엔드 (0)
        • 백엔드 (2)
        • 인프라 (0)
        • AI · 머신러닝 (4)
      • IT · 테크 (8) N
        • 기술 트렌드 (3)
        • 도구 · 생산성 (1)
        • 제품 리뷰 · 추천 (0)
        • 마케팅 · 수익화 (4) N
      • 자기계발 (7)
        • 공부법 · 언어 (0)
        • 취업 · 커리어 (7)
      • 아카이브 (486)
        • 일기 (480)
        • 취미 (6)
  • 블로그 메뉴

    • 홈
  • 링크

    • 블로그 이전
  • 공지사항

    • 서브 블로그 => https://kwonputer.com/
  • 인기 글

  • 태그

    flutter 면접 질문
    내러티브 게임
    1인개발
    flutter 개발자
    dynamodb
    TypeScript
    kotlin
    flutter
    사이드프로젝트
    다국어 블로그
    ai 게임 개발
    aws lambda
    크로스플랫폼
    AWS CDK
    python 기초
    파이썬
    상태관리
    OpenAI GPT
    Single Table Design
    파이썬 기초
    python
    Prompt Engineering
    injectable
    https://www.kwonputer.shop/
    FACEBOOK광고
    riverpod
    클린 아키텍처
    서버리스 아키텍처
    https://github.com/kwongeneral/kortfolio.git
    Clean Architecture
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
권퓨터
면접 문제 - 팩토리얼 구현!
상단으로

티스토리툴바