본문 바로가기

알고리즘 & 코딩테스트

(48)
Programmers Lv.1 "가운데 글자 가져오기" 요 문제는 단어의 길이가 짝수이냐 홀수이냐에 따라 경우를 나눌 수 있다. 문제에서 얘기하는 '가운데 글자'라고 하는것은 정 중앙에 위치한 글자를 의미하고 이는 처음에 주어진 문자열 s의 길이에 따라(짝/홀 여부) 한글자가 되기도, 두 글자가 되기도 한다는 말이다. 이를 유의해서 아래 코드를 보면 이해할 수 있다. def solution(s): length = len(s) if length%2==0: return s[int(length/2-1):int(length/2+1)] else: return s[int(length/2)]
Programmers Lv.1 "제일 작은 수 제거하기" 흠... 그냥 구현문제이다. 지문을 잘 읽고 이를 그대로 코드로 옮기면 된다. 보통 "단,"이후에 나오는 문장들이 중요한 정보를 담고 있을 확률이 높으니 유의하면서 작성해보자. # 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다. # 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다. def solution(mylist): # 함수를 완성하세요 # mylist.sort() if mylist == [10]: return [-1] else: del mylist[mylist.index(min(mylist))] return mylist # 아래는 테스트로 출력해 보기 ..
Programmers Lv.1 "없는 숫자 더하기" 따로 알고리즘을 말할 필요도 없는 쉬운문제이다. 주어진 범위의 숫자 중 빠진 숫자를 필터링하고 이들의 합을 반환하면 된다. 필자는 comprehension을 이용하여 깔끔하게 구현하였다. def solution(numbers): return sum([elem for elem in range(0, 10) if elem not in numbers ])
Programmers Lv.1 "음양 더하기" 요 문제는 특이한 유형이라고 볼 수 있다. 문제 자체의 난이도는 역시나 Lv.1답게 매우 쉬운데 구현을 요구하는 방식에서 독특한 유형을 가진다. 핵심은 이것이다. 주어진 숫자의 총합을 반환하는것. 단, 주어진 숫자의 형식이 일반적이지 않다. 바로, 각 숫자의 절댓값과 부호를 따로 준다는 점이다. 이는 병렬적으로 바라보면 바로 해결할 수 있는데 파이썬에서는 동일한 길이를 가지는 이터러블 객체에서 위와같은 병렬적 처리를 할 때 아주 유용한 zip()이 존재한다. zip()에 대한 내용은 따로 다루지 않을 것이지만 문제를 풀 당시 공부했던 링크를 첨부하겠다. 참고바란다. def solution(absolutes, signs): answer = [] for number, sign in zip(absolutes,..
Programmers Lv.1 "나누어 떨어지는 숫자 배열" 요 문제는 문제가 복잡해보이지만 그렇지 않은 설명만 긴 문제이다. 주어진 리스트에 대해 각 요소를 순회하면서 해당 값을 divisor로 나누었을 때 나눠지는 값들만 모아서 오름차순으로 정렬하면 된다. 아래 코드로 이해하자. def solution(arr, divisor): answer = [] for element in arr: if element%divisor==0: answer.append(element) if answer: answer = sorted(answer, reverse=False) else: answer.append(-1) return answer