새소식

Computer Science/코딩테스트 문제 풀이

[N시간만에 끝내는 Python 코딩테스트] 1편 주의사항과 워밍업

  • -

https://www.youtube.com/watch?v=OPtne0TbUYI&list=PLkfUwwo13dlUW9tPNXYnr-6EmYuUOvlko&index=1

 

1. 코드 스니펫: 트리, 검색, 최단경로, 다익스트라등 미리 짜둔 흐름, 코드들을 만들어두자. 

2. Cheat sheet를 준비하자 

3. 유용한 라이브러리를 미리 정리해라 -> 효율적인 루핑 만들기 

 

구글에 코딩 도장 검색하기 

 

1번 워밍업 문제 (google) 

1부터 10,000까지 8이라는 숫자가 총 몇번 나오는가?

8이 포함되어 있는 숫자의 갯수를 카운팅 하는 것이 아니라 8이라는 숫자를 모두 카운팅 해야 한다. (*예를 들어 8808은 3, 8888은 4로 카운팅 해야함 

 


count = 0
res =[]
for i in range(100+1):
    if '8' in str(i):
        res.append(i)
        # 틀림 : count += 1
        count += str(i).count('8')
        
print(count)	# 20
print(res)		# [8, 18, 28, 38, 48, 58, 68, 78, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 98]
print(len(res)) # 19가 나오는 이유 '88'은 8이 2개로 카운트해야함

 

2번 워밍업 문제 

1차원의 점들이 주어졌을 때, 그 중 가장 거리가 짧은 것의 쌍을 출력하는 함수를 작성하시오. (단, 점들의 배열은 모두 정렬되어 있다고 가정한다.) 

예를 들어 S = [1,3,4,8,13,17,20]이 주어졌다면, 결과값은 (3,4)가 될 것이다. 

 

s = [1,3,4,8,13,17,20] 
m = max(s) 

index = 0
for i in range(len(s)-1):
	if m > s[i] - s[i+1]:
    	m = s[i] - s[i+1]
        index = i

print(s[index], s[index+1])

## 다른 방법 

s = [1,3,4,8,13,17,20] 
ss = s[1:]
print(sorted(list(zip(s, ss)), key=lambda x: x[1]-x[0])[0])
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.