본문 바로가기

Computer Science23

adjacency matrix로 구현된 graph를 DFS할 때 time complexity Question. Answer. C 2021. 2. 14.
[Python] list 복사 ([:], copy(), deepcopy()) 파이썬 ps를 하면서 많이 하기 쉬운 실수들에 대해 적는다. 다음 두 코드의 결과는 어떻게 될까? 하나는 맞고 하나는 이상한 결과를 배출한다. 1) class Solution(object): def subsets(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ results = [] def dfs(nums, k, pos, subsets=[]): if k == 0: results.append(subsets) return for i in range(pos, len(nums)): subsets.append(nums[i]) dfs(nums, k - 1, i + 1, subsets) subsets.pop() for i in range(len(.. 2021. 2. 11.
시스템 설계 및 규모 확장성 문제들 시스템 설계 및 규모 확장성 문제들 빅테크 기업에서 가끔 '시스템 설계'가 면접의 일부분으로 들어가 있다고 한다. 실제로 아마존에서는 면접 한 세션은 시스템 설계 세션도 있다고 들었는데, FANG(Facebook, Amazon, Netflix, Google)에서는 이런 부분도 물어보는 듯하다. 그래서 이번에는 시스템 설계 문제들을 공부할 겸 해당 문제들을 적어봤다. 국내 IT 기업은 시스템 설계 문제들을 직접적으로 물어보는 것 같진 않고, "100만 유저가 사용하는 시스템을 설계하면?" "트래픽이 순간적으로 많을 때 어떻게 해결할지?" "대용량 데이터는 어떻게 저장하고 관리할지?" 이와 같이 큰 범주에서 물어보는 듯하다. 문제의 포인트는 평소 프로그램을 만들 때, 이러한 부분들까지 고민하고 만드는지, 아.. 2021. 2. 6.
Q. 문자열을 뒤집는 모든 방법 Q. 문자열 뒤집는 방법을 아는 대로 말하면? 이러한 질문을 면접 때 받은 적이 있다.정말 아는 대로 말하면 되는데, 당시에 투포인터 solution을 말하지 못했다. java, python 등 대부분 문자열을 뒤집는 함수가 내장되어 있는데, 안에를 뜯어보면 투포인터로 구현되어 있다. 그리고 나중에 다른 지원자들과 복기를 했을 때, 투포인터 solution을 말한 사람이 거의 없었다.또, 지원하는 언어의 특징에 맞게 대답한 사람도 거의 없었다. -출제 의도1) 간단한 알고리즘조차 잘 구현 못하는 지원자는 거르고 싶다2) 지원하는 언어에 어울리는 해결방식으로 이 간단한 문제를 해결하는지 보고 싶다. -고득점 비결1) inplace로 뒤집을 수 있는 방법 말하기(=투포인터 이용 solution)2) 지원하는.. 2021. 2. 1.
CS & AI 기술 면접 질문들과 답변들 (21.06.10 updated) 기술면접 질문들과 답변들 *링크 클릭하면 답 정리(keyword version, ~습니다체 모두)되어 있음 1) 신입공채 기술면접 방식 -CS 기본지식이 초점! -코딩테스트 중요 2) 신입상시채용 기술면접 방식 -팀에서 쓰는 해당 스택과 관련된 프로젝트 경험이 있는지? -CS 기본지식은 갖춰져 있는지? 3) 경력직 기술면접 방식 -소프트웨어 공학, 언어 고급 문법, 디자인패턴, 솔루션 아키텍쳐, SQL 구현 -객체지향적 설계능력, 코드재활용의 장단점, 적절한 디자인패턴 응용, 아키텍쳐 설계 능력, 클래스간 구조정의, 테스트 케이스 작성, 업무 이해력, 간결한 코드의 중요성 Contents. -자료구조/알고리즘(Data Structure / Algorithm) feat. 손코딩 -데이터베이스(DB) -운영.. 2021. 1. 31.
python list append() vs extend() 차이 *python list append() vs extend() 차이 python list에 새로운 원소를 추가하는 방법은 append(x)와 extend(iterable)이 있다. 각각의 차이에 대해 묻는 질문을 본 적이 있어 정리한다. - list.append(x) : 리스트 끝에 x 1개를 '그대로' 넣는다 - list.extend(iterable) : 리스트 끝에 '가장 바깥쪽 iterable'의 모든 항목을 넣는다 가령 [a, b, c]에 [d, e]를 추가한다고 할 때, append를 쓰면 [a, b, c, [d, e]] 이런 식으로 들어간다. 그런데 [a, b, c, d, e]로 넣고 싶다... 그러면 extend를 쓰면 된다! 이렇게 [ ]를 벗기고 넣어야 할 때 쓰는 게 extend다. 생각.. 2021. 1. 31.