[Coding Test] 관련 강의 정리 03

GreenBean·2022년 5월 9일
0
post-thumbnail

Coding Test

N시간 만에 끝내는 코딩테스트 1편

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

코테 전 준비사항

  • 플랫폼에 익숙해지자!
    • 프로그래머스, 구름 EDU 등
    • 사용 가능 라이브러리 미리 확인
  • 언어 선택
    • 속도: C++
    • 풀이: Python
  • 코드 스니펫 준비
    • 트리, 검색, 최단경로 (예를 들어 다익스트라) 등
  • Cheat Sheet 준비
  • A4 용지 준비
  • 유용한 라이브러리 정리
    • collections
    • itertools (순열 조합)
  • 기억해두자! 예외처리!

1번 | 워밍업 문제

코딩도장: 구글 입사문제 중에서

  • 1부터 10,000까지 8이라는 숫자가 총 몇번 나오는가?
    • 8이 포함되어 있는 숫자의 갯수를 카운팅 하는 것이 아니라 8이라는 숫자를 모두 카운팅 해야 한다
    • 예를 들어 8808은 3, 8888은 4로 카운팅 해야 함
# 풀이 1

>>> str(list(range(1, 10001))).count('8')
4000

# 풀이 2

>>> count = 0
... for i in range(10001):
...     if '8' in str(i):
...         count += str(i).count('8')
>>> count
4000

# 풀이 3

>>> str([i for i in range(10001)]).count('8')
4000

Tip! 속도 측정

  • %%timeit
    • 코드를 여러번 실행하고 평균 시간을 측정해서 알려줌

2번 | 워밍업 문제

코딩도장: 다음 입사문제 중에서

  • 1차원의 점들이 주어졌을 때, 그 중 가장 거리가 짧은 것의 쌍을 출력하는 함수를 작성하시오
    • 단 점들의 배열은 모두 정렬되어있다고 가정한다
    • 예를 들어 S = [1, 3, 4, 8, 13, 17, 20] 이 주어졌다면 결과값은 (3, 4)가 될 것이다
# 풀이 1

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

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

>>> s[index], s[index+1]
(3, 4)

# 풀이 2

>>> s = [1, 3, 4, 8, 13, 17, 20]
>>> ss = [3, 4, 8, 13, 17, 20]

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

# 풀이 3

>>> def 두수의차(i):
...     return i[1] - i[0]

>>> sorted(list(zip(s, ss)), key=두수의차)
[(3, 4), (1, 3), (17, 20), (4, 8), (13, 17), (8, 13)]
>>> sorted(list(zip(s, ss)), key=두수의차)[0]
(3, 4)

N시간 만에 끝내는 코딩테스트 2편

N시간 만에 끝내는 코딩테스트 2편: 2018 카카오 코딩테스트 1번 비밀지도

비밀지도 (난이도: 하)

kakao Tech: 카카오 신입 공채 1차 코딩 테스트

# 풀이 1

>>> bin(9)
'0b1001'
>>> bin(30)
'0b11110'

>>> #  1001
>>> # 11110
>>> # -----
>>> # 11111

>>> bin(9 | 30)
'0b11111'
>>> bin(9 | 30)[:2]
'11111'
>>> bin(9 | 30)[:2].replace('1', '#').replace('0', ' ')
'#####'

>>> arr1 = [ 9, 20, 28, 18, 11]
>>> arr2 = [30,  1, 21, 17, 28]
>>> n = 5

>>> for i in zip(arr1, arr2):
...     print(i)
(9, 30)
(20, 1)
(28, 21)
(18, 17)
(11, 28)

>>> for i, j in zip(arr1, arr2):
...     print(i, j)
9 30
20 1
28 21
18 17
11 28

>>> for i, j in zip(arr1, arr2):
...     print(bin(i | j)[2:].replace('1', '#').replace('0', ' '))
#####
# # #
### #
#  ##
#####

>>> arr1 = [3, 20, 28, 18, 11]
>>> arr2 = [5,  1, 21, 17, 28]
>>> n = 5

>>> #  11
>>> # 101
>>> # ---
>>> # 111

>>> for i, j in zip(arr1, arr2):
...     print(bin(i | j)[2:].replace('1', '#').replace('0', ' '))
###
# # #
### #
#  ##
#####

>>> for i, j in zip(arr1, arr2):
...     print(bin(i | j)[2:].zfill(n))
00111
10101
11101
10011
11111

>>> for i, j in zip(arr1, arr2):
...     print(bin(i | j)[2:].zfill(10))
0000000111
0000010101
0000011101
0000010011
0000011111

>>> for i, j in zip(arr1, arr2):
...     print(bin(i | j)[2:].zfill(n)).replace('1', '#').replace('0', ' '))
  ###
# # #
### #
#  ##
#####

>>> def solution(n, arr1, arr2):
...     answer = []
...     for i, j in zip(arr1, arr2):
...         anser.append(bin(i | j)[2:].zfill(n)).replace('1', '#').replace('0', ' '))
...     return answer

N시간 만에 끝내는 코딩테스트 3편

N시간 만에 끝내는 코딩테스트 3편: 2018 카카오 코딩테스트 2번 다트게임

다트게임 (난이도: 하)

kakao Tech: 카카오 신입 공채 1차 코딩 테스트

# 풀이 1

profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글