본문 바로가기

알고리즘 & 코딩테스트

(48)
Programmers Lv.1 "부족한 금액 계산하기" 이 문제의 핵심은 1회 이용에 price원인 놀이기구를 N번째 사용하면 원래 이용료의 N배를 받기로 한 것이다. 놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마나 모자라는지 반환하는 것이다. 쉽게 생각하자. count번 타게 될 때 주어진 조건을 따져야하는거기 때문에 먼저 count번 놀이기구 탈 때의 이용료를 다 저장하자. 이를 누적합이라고 했을 때 주어진 money가 누적합보다 크면 금액이 부족하지 않다는 말이므로 0을 return하고, 아닐경우 누적합에서 money를 빼서 얼마나 모자라는지 그 차액을 return하자. def solution(price, money, count): answer, tmp = -1, 0 for cnt in range(1, count+1): tmp..
Programmers Lv.1 "약수의 개수와 덧셈" 요 문제는 매개변수로 주어지는 left와 right 사이의 범위 내에서 각 숫자에 대해 약수의 개수를 구한뒤 그 수가 짝수이면 더하고 홀수이면 빼면 된다. 즉, 약수를 구하는 부분을 따로 생각하고 전체 프로그램 구조를 아래와 같이 생각하면 된다. def solution(left, right): def cntDivisor(number): divisor = [i for i in range(1, number+1) if number%i==0] if len(divisor) % 2 == 0: return 1 else: return -1 answer = 0 for target in range(left, right+1): answer += cntDivisor(target)*target return answer
Programmers Lv. 1 "문자열 내림차순으로 배치하기" 오름차순, 내림차순은 우리가 흔히 사용하는 정렬방식중 하나이다. 너무 자주 사용되기에 내장메서드로도 구현되어있는데, 파이썬은 이를 sort()와 sorted()를 이용해서 제공한다. 대문자가 소문자보다 작은 것으로 취급한다고 하는데, 여기서 낚이면 안된다!!! 파이썬은 C언어를 기반으로 만들어진 것이고, 문자를 비교할 때 아스키 코드값으로 비교를 한다. 즉, 단일 대문자는 당연히 단일 소문자보다 작다. 저 문장은 모르는사람한테 낚시를 거는 문장이 될 것이다. def solution(s): return ''.join(sorted(s, reverse=True))
Programmers Lv.1 "내적" 내적(dot-product)에 대한 수식이 주어지고 이를 그대로 구현하면 되는 문제이다. 리스트 a, b가 주어지고 각 index에 해당하는 값들을 서로 곱해서 총합을 구하면 된다. 즉, 전에 포스팅에서 언급했듯 병렬처리를 하면 쉽게 해결할 수 있고, zip( )을 사용하면 바로 해결된다. 그렇지만 이번에는 Python의 numpy 라이브러리를 이용한 풀이를 소개해보겠다. 먼저 numpy에 대해 소개하면, numpy는 리스트를 행렬로 취급하여 처리하는 수학에 대한 처리 라이브러리이다. 또한 내적(dot-product)이 내장 메서드로 포함되어있어 쉽게 해결할 수 있다. import numpy as np def solution(a, b): a = np.array(a) b = np.array(b) retur..
Programmers Lv.1 "수박수박수박수박수박수?" "수박"이 연달아 나오는 문자열을 만드는 문제이다. 만들어야 될 문자열의 길이가 주어지면 위의 패턴을 유지한 채 문자열을 만들면 된다. 단, 전의 "가운데 글자 가져오기" 포스팅과 같이 패턴이 2글자이므로 이 역시 문자열의 순서에 따라 다른 문자열이 붙는다. (말을 뭔가 이상하게 한 것 같긴 한데..ㅎ 잘 알아들었을거라 생각한다.) def solution(n): answer = '' for loop in range(n): answer += '수' if loop%2==0 else '박' return answer