관리자

1. Hash Table

탐색

worst case : O(n)

average : O(1)

 

2. 가변 크기 배열

원소 삽입 : O(1)

크기를 두 배로 늘리는 시간 : O(n)

 

3. 문자열

이어붙이기 :  O(n**2)

 

면접 문제

1.1 문자열에 같은 문자가 중복되어 등장하는가?

ans:

해시 테이블을 만들어서, 문자열을 순회한다.

문자열을 키로 가지도록 한다. 이미 존재하는 키인 경우 동일한 문자열이 존재한다.

시간 복잡도 : O(n) - 한번 순회하면 끝남 * 삽입과 탐색은 O(1)

공간 복잡도 : O(n)

 

1.1-1) 추가 자료 구조를 사용하지 않으려면?

for (i=0;i<s.length()-1;i++){
	for(j=i+1;j<s.length();j++){
    	if s[i] == s[j] :
        return True
        }
    }
 return False

시간 복잡도 : O(n**2)

공간 복잡도 : X

 

1.2 두 문자열이 서로 순열 관계인지 확인하는 메서드

s1.sort()
s2.sort()

return s1 == s2

시간 복잡도 : 정렬 방식에 의해 결정

공간 복잡도 : X

 

2) hash table을 만들어서 각 문자열의 출현 빈도를 세서 비교한다.

 

1.3

모든 공백을 %20으로 바꾸어주는 메서드

s.replace(' ', '%20)
import re
pat = re.compile(' ')
re.sub(pat, '%20', s)

 

1.4

회문 순열

주어진 문자열이 회문의 순열인지 확인하는 함수

문자열을 순회하면서 각 문자를 키로 갖는 Hash Table을 만든다.

모든 문자가 짝수개 존재하거나, 하나만 홀수개 존재하고 나머지는 짝수개 존재해야한다.

 

1.5

문자 삽입/삭제/교체를 한 번 이내 수행해서 같은 문자열로 만들 수 있는지 확인하는 함수

if len(s1)==len(s2):
	flag = False
	for i in range(len(s1)):
    	if flag : return False
		if s1[i] != s2[i]:
        	flag = True
    return True
    
    
elif len(s1) < len(s2):
	j=0
    flag = False
    for i in range(len(s1)):
    	if s1[i] != s2[j]:
        	if flag : return False
        	j += 1
            flag = True
    return True
    
else:
	i=0
    flag = False
    for j in range(len(s2)):
    	if s1[i] != s2[j]:
        	if flag : return False
        	i += 1
            flag = True
    return True

 

1.6 문자열을 압축하자

aabcccaaa -> a2b1c5a3

만약 압축된 문자열이 더 길다면 기존 문자열을 반환하자

pre = None
zipped = []
c = 0
for i in range(len(s)):
	if s[i] == pre:
    	c += 1
    else:
    	zipped.append(pre + str(c))
    	pre = s[i]
zipped = ''.join(zipped)

if len(zipped) > len(s): return s
return zipped

 

1.7 행렬을 90도 회전시키는 메소드

행렬을 추가로 사용하지 않고도 가능한가?

temp = M[i][j]
W = len(M[0])
H = len(M)

for i in range(len(M)//2):
	for j in range(i,len(M[0])//2-i):
    	temp = M[i][j]
        for k in range(4):
            M[i][j] = M[j][W-1-i]

 

1.8 0 행렬

m x n행렬의 한 원소가 0일 때, 해당 원소가 속한 행과 열의 모든 원소를 0으로 설정하는 알고리즘

 

 

1.9

s2를 두 번 이어붙이고, s1이 s2를 이어붙인 문자열의 substring인지 확인한다

'Cracking the Coding Interview' 카테고리의 다른 글

3. Stack/Queue  (0) 2019.10.16

+ Recent posts