많은 IT 기업에서 지원자의 코딩 역량을 확인하기 위해 서류평가 이후에 코딩테스트를 본다. 나는 데이터 직무를 희망하고 데이터 직무는 크게 SQL 코테 또는 python코테 또는 과제형식의 문제로 기업마다 시험이 다르기 떄문 다양하게 준비해야할 필요가 있었다. 이전에 SQL 쿼리 코딩테스트 문제는 프로그래머스를 통해 공부했었다. 따라서 이제 python을 활용해 알고리즘 문제를 푸는 코딩테스트도 조금씩 준비해 보려고하고 , 마침 빅데이터혁신 사업단에 비교과 과정으로 5일동안 총25시간 하는 좋은 강의가 있어 참여하게 되었다.
이전에 python코딩테스트 문제를 부트캠프 하면서 아주 조금 접해본적은 있다. 그 이후 미루다가 강의를 통해 오랜만에 문제를 풀어봤는데 1단계 부터 막혔다.. 다행히 강의는 상급자를 위한 강의가 아닌 나같은 초보자를 위한 맞춤 강의였기 때문에 천천히 따라가면서 배울 수 있었다. 강의 끝난 시점 이제는 1단계는 어느정도 푸는것 같다. 목표는 다양한 유형에 2단계까지 무리없이 푸는것이다. 꾸준하게 많이 풀어봐야겠다..
강의를 들으면서 풀어봤던 유형들을 정리해 보려고 한다. 특히 , 강사님이 주신 짧은 시간에 바로 해결하지 못한 문제들을 위주로 작성해보겠다. 문제는 총 20문제 정도 푼 것 같다.
문제 ) 두 정수 q, r과 문자열 code가 주어질 때, code의 각 인덱스를 q로 나누었을 때 나머지가 r인
위치의 문자를 앞에서부터 순서대로 이어 붙인 문자열을 return
def solution(q, r, code):
# q:3 r:1 index : 1 4 7 10 13
# q:1 r:0 index : 0 1 2 3 4
answer = ''
for c in range(r,len(code),q):
answer += code[c]
return answer
부끄럽지만 처음에 위 문제도 못풀었다. 오랜만이라 인덱스 , 슬라이싱 감도 떨어져있는 상태라 어떻게 접근은 해야할지도 몰랐었다.
문제 )함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
'''
def solution(n):
answer = sorted(str(n))[::-1]
return int(''.join(answer))
'''
문제 ) 길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
# 내 풀이
def solution(n):
answer = ['수']
for i in range(n-1):
if answer[-1] == '수':
answer.append('박')
else:
answer.append('수')
answer = ''.join(answer)
return answer
# 다른 풀이
def solution(n):
answer = ''
for i in range(n):
if i % 2 == 0:
answer += "수"
else:
answer += "박"
return answer
문제)피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요.
# F(2) = F(0) + F(1) = 0 + 1 = 1
# F(3) = F(1) + F(2) = 1 + 1 = 2
# F(4) = F(2) + F(3) = 1 + 2 = 3
# F(5) = F(3) + F(4) = 2 + 3 = 5
# F(6) = F(4) + F(5) = 3 + 5 = 8
def solution(n):
f = [0,1] # 1,2를 담겨놓고 계속 추가시키는 느낌
for i in range(2,n+1):
f.append(f[i-2] + f[i-1]) # f[n]
answer = f[-1]%1234567
return answer
문제) 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어"()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
# 내코드 (테스트 케이스 하나 통과못함)
def solution(s):
if s.count('(') == s.count(')'):
for i in range(len(s)//2):
s = s.replace('()','')
if s == '':
return True
else:
return False
else:
return False
def solution(s):
openNum = 0
for i in s:
if i == "(":
openNum += 1
else: # 닫는 괄호가 나오면, openNum에서 세어둔 열린 괄호 짝
openNum -= 1
if openNum == -1:
return False
if openNum == 0:
return True
else: # 열린 괄호가 남았다!
return False
문제 ) 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
def solution(numbers):
numbers = list(map(str,numbers))
numbers = sorted(numbers ,key=lambda x : x*3, reverse=True) # 요소들에 *3을해서 정렬한다
answer = str(int("".join(numbers))) ## '00' -> 0
return answer
문제) 수많은 마라톤 선수들이 마라톤에 참여하였습니다.
단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
# 인덱스끼리 비교해서 걸리는경우
def solution(participant, completion):
participant = sorted(participant)
completion = sorted(completion)
for i in range(len(completion)):
if participant[i] != completion[i]:
return participant[i]
# 끝까지 안걸리면 마지막 사람이 범인
return participant[-1]
문제) 숫자와 "Z"가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 "Z"가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 "Z"로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요.
def solution(s):
# 스택 풀이
stack = []
for i in s.split(' '):
if i == 'Z':
stack.pop()
else:
stack.append(int(i))
return sum(stack)
def solution(s):
s_list = s.split(" ") # ['1', '2', 'Z', '3']
answer = 0
for i in range(len(s_list)):
if s_list[i] == "Z":
answer -= int(s_list[i - 1])
else:
answer += int(s_list[i])
return answer