programing/Algorithm
-
[Programmers] 두 정수 사이의 합programing/Algorithm 2021. 1. 1. 20:35
두 정수 사이의 합 level 1 연습문제 python3 def solution(a, b): if a == b: return a; summery = 0 if (a > b): tmp = b b = a a = tmp for num in range(a, b + 1): summery += num return summery range와 for만 잘 쓰면 되는 문제. def solution(a, b): if a > b: a, b = b, a return sum(range(a,b+1)) 파이썬에서는 tuple을 이용해 스왑을 편하게 할 수 있다. sum도 함수로 제공하고 있었다.. 😅
-
[Programmers] 나누어 떨어지는 숫자 배열programing/Algorithm 2021. 1. 1. 20:21
나누어 떨어지는 숫자 배열 연습 문제 python3 def solution(arr, divisor): answer = [] for e in arr: if e % divisor == 0: answer.append(e) if len(answer) == 0: return [-1] answer.sort(); return answer 정렬을 어떻게 해야 할까 하다가.. 그냥 내장 함수 썼는데 통과. 사실 효율성 체크가 없었기도 하고..ㅋㅋ; def solution(arr, divisor): return sorted([n for n in arr if n%divisor == 0]) or [-1] array comprehension을 이용하면 위와 같이 할 수 있다. 볼때마다 신기한 문법...
-
[Programmers] 같은 숫자는 싫어programing/Algorithm 2020. 12. 19. 18:39
같은 숫자는 싫어 연습 문제 python3 def solution(arr): i = 0 l = len(arr) while i < l: j = i + 1 last = i # 동일한 숫자가 어디까지 연속되는지 구한다 while j < l and arr[i] == arr[j]: last = j j += 1 # 연속된 개수만큼 제거 for k in range(last - i): del arr[i] # 다음을 위해 인덱스 및 길이 보정 i += 1 l = len(arr) return arr 처음에는 시간을 고려해서 다음과 같은 로직으로 문제를 풀었다. 1. 첫번째 숫자를 선택한다 2. 해당 숫자와 동일한 숫자가 연속으로 존재하는 마지막 인덱스를 찾는다 3. 선택한 숫자의 인덱스부터 마지막 인덱스의 인덱스 차이만큼..
-
[baekjoon] 1655 - 가운데를 말해요programing/Algorithm 2020. 12. 12. 21:40
가운데를 말해요 우선순위 큐 python3 from sys import stdin n = int(stdin.readline()) nums = [] # 삽입할 위치를 찾는 함수. 약간 binary search 흉내낸.. def bs(n, l, r, numbers): # n과 가장 가까운 숫자가 위치한 인덱스를 찾은 경우 if l == r: if n < numbers[l]: return l else: return l + 1 m = (l + r) // 2 # 수빈이가 같은 숫자를 여러번 말하지는 않기 때문에, n == numbers[m]은 따로 처리하지 않음. if n
-
[Programmers] 3진법 뒤집기programing/Algorithm 2020. 11. 15. 19:46
3진법 뒤집기 월간 코드 챌린지 시즌 1 python3 def solution(n): quetient = 3 remainders = [] while n >= quetient: tmp = n // quetient remainders.append(n % quetient); n = tmp remainders.append(n) remainders.reverse() my_sum = 0 for i in range(len(remainders)): my_sum += remainders[i] * (quetient ** i) return my_sum 진법 변환은 [디지털논리] 10진수를 2진수로 변환하는 방법을 확인해주세요. 입력받은 숫자를 계속해서 3으로 나누면서 나머지를 remainders에 푸쉬합니다. for문에서 ..
-
[Programmers] 가운데 글자 가져오기programing/Algorithm 2020. 11. 15. 16:15
가운데 글자 가져오기 연습문제 python3 import math; def solution(s): isOdd = len(s) % 2 startIndex = math.ceil(len(s) / 2) - 1 endIndex = 1 if isOdd else 2 answer = s[startIndex: startIndex + endIndex] return answer 길이에 따라 시작 인덱스를 구하는 공식이 위와 같습니다. 시작 인덱스와 끝 인덱스를 구해서 슬라이싱해주면 됩니다.
-
[Programmers] 2016년programing/Algorithm 2020. 11. 15. 16:02
2016년 연습문제 python3 def solution(a, b): date = ['FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED', 'THU'] num_of_day = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] mGap = a - 1 dGap = b - 1 gap = sum(num_of_day[0:mGap]) + dGap i = gap % 7 return date[i] 입력받은 날자와 1월 1일의 차이를 구합니다. 해당 차이를 7로 나눈 나머지에 해당하는 날자를 반환하면 됩니다. 2016년 1월 1일이 금요일이므로, date는 'FRI' 부터 시작합니다.
-
[Programmers] K번째 수programing/Algorithm 2020. 10. 25. 13:38
K번째 수 정렬 문제 python3 def solution(array, commands): answer = [] for command in commands: [i, j, k] = command sliced = array[i - 1:j] sliced.sort() answer.append(sliced[k - 1]) return answer 간단합니다. commands 가 원소 3개짜리 리스트의 리스트 (2차원 배열)이므로, 순회를 하면서 i, j, k를 뽑아서 슬라이싱 후 정렬 후 k번째 원소를 result에다가 푸쉬하면 됩니다.