[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/알고리즘 연습 67

[알고리즘 연습] 온도의 최대값 (by C++)

온도의 최대값 매일 일정한 시간에 온도를 측정하여 기록한다고 하자. 정수 n 입력받음. 정수 k 입력받음. n일동안 입력된 온도들이 있다. 이 때 k일동안 연속하여 온도를 합쳤을 때 그 수치가 최대가 되는 값을 찾아라. 최대값을 출력함. 풀이 #include #include using namespace std; int main() { int i, n, k, sum=0, max; cin >> n >> k; vector a(n); for (i=0; i> a[i]; } for (i=0; i

[알고리즘 연습] 요세푸스 문제

https://www.acmicpc.net/problem/1158 풀이 n, k = map(int, input().split()) num_list = list(range(1,n+1)) idx = k - 1 print("") 리스트를 활용한 풀이이다. k번째 사람은 인덱스 상으로는 k - 1번째 사람이므로 처음 인덱스를 k -1로 부여한다. 이 후에도 k - 1씩 더하되, 리스트의 전체 길이보다 커지지 않도록 mod 연산 처리를 해준다. from collections import deque n, k = map(int, input().split()) num_list = deque(range(1, n+1)) result_str = "" while len(num_list) > 0: num_list.rotate(..

[알고리즘 연습] 두 부분집합의 균형 맞추기

두 부분집합의 균형 맞추기 사용자로부터 집합 data를 입력받는다 입력받은 집합 data를 A, B 둘로 나눈다. A와 B의 개수는 맘대로 정할 수 있다. (5개의 집합을 3개, 2개로 나누든 1개, 4개로 나누든 상관없다는 뜻이다.) A와 B의 요소도 맘대로 정할 수 있다. ([1,2,3,4,5] 집합을 [1,3,5]와 [2,4]로 나누는 것도 가능하다.) 단 A와 B를 합쳤을 때는 반드시 data의 요소를 모두 가져야 한다. 이 때 'A요소들의 합 - B 요소들의 합' 절댓값의 최솟값을 찾아라. (A, B를 찾을 필요는 없다.) 풀이 def getPowerSet(n,k): if n == k: return [[k]] basic = k result = [[basic]] k += 1 while (n >= ..

[알고리즘 연습] 멱집합

멱집합 구하기 숫자 n을 입력받고 1~n의 수를 원소로 가지는 집합의 멱집합을 구한다. 멱집합를 하나씩 출력한다. 단, 출력 순서는 [1], [1,2], [1,2,3], [1,3], [2], [2,3], [3] 과 같은 패턴을 가져야 한다. 풀이 def getPowerSet(n,k): if n == k: return [[k]] basic = k result = [[basic]] k += 1 while (n >= k): for i in getPowerSet(n,k): result.append([basic] + i) k += 1 return result def powerSet(n) : result = [] for i in range(1,n+1): result += getPowerSet(n,i) return ..

[알고리즘 연습] 괄호의 점수

괄호의 점수 (,)의 두개의 문자로만 구성된 올바른 괄호문자열이 입력으로 주어진다. (짝이 안맞는 경우는 없음) “()” 은 1점 '('과 ')' 사이에 n점짜리 문자열이 있다면 (2*n)점으로 계산 둘 이상의 괄호가 나란히 있다면 두 괄호의 점수를 합침 ex. "(()(()()))" 는 10점 풀이 def getParenthesisScore(st): Fragments = [] # ')'과 '('이 만나는 지점을 기준으로 나눠 각각을 'Fragment'라 부름 # Fragments는 이들 Fragment들이 담기는 공간 # 예를 들어 ()()(())는 () / () / (())로 나누어져 Fragments에 저장된다. Fragment = "" # Fragment가 저장될 공간. () or (()) or ..

[알고리즘 연습] 하노이의 탑

하노이의 탑 def hanoi(height) : result = [] def move(begin, end, height): if (height == 1): result.append((begin, end)) else: mid = (6 - begin - end) move(begin,mid,height-1) result.append((begin,end)) move(mid,end,height-1) move(1,3,height) return result def main(): print(hanoi(3)) 유명한 하노이의 탑 문제이다. 처음 프로그래밍을 접했을 때, 이 문제로 하루종일 끙끙댔엇는데 이번엔 3분정도 고민 후 해결했다. (새삼 뿌듯했다.) 최대한 단순하게 접근하는 것이 포인트였다. 10개의 링을 마지막으..

[알고리즘 연습] 중복되지 않는 수 찾기

중복되지 않은 하나의 숫자 찾아내기 숫자들의 배열이 주어진다. 배열은 2n - 1의 크기를 가지며 1부터 n까지의 숫자로 이루어져 있다. 모든 숫자가 2번씩 나타나지만 하나의 숫자만 한번 나타난다. 해당 수를 찾아라. 풀이 def findSolo(nums): nums.sort() for i in range(0, len(nums), 2): if (nums[i] != nums[i + 1]): return nums[i] return 0 def main(): print(findSolo([1, 5, 3, 1, 2, 6, 4, 5, 2, 6, 3])) 배열을 정렬후 (NlogN) 반복문으로 2개씩 넘어가면서 체크한다. 다음 인덱스의 값과 다른 경우 해당 값을 리턴한다.

[알고리즘 연습] 최대 수익 구하기

최대 수익 구하기 인덱스별로 주식의 가격이 적혀있는 리스트가 있다. 해당 리스트에서 주식을 사고 팔았을 때 얻을 수 있는 최대 수익은 얼마인지 구해라 풀이 def maximizeProfit(nums): max_profit = 0 min_price = nums[0] for now in nums: profit = now - min_price if profit > max_profit: max_profit = profit if min_price > now: min_price = now return max_profit def main(): print(maximizeProfit([1,2,3,4,5,6,7])) # 6 print(maximizeProfit([7,6,5,4,3,2,1])) # 0 print(maximi..

[알고리즘 연습] 마지막으로 남는 카드

마지막으로 남는 카드 1~n순서로 쌓여있는 카드뭉치가 존재한다. (맨 앞이 1) 앞부터 제일 앞카드는 버리고, 그 다음카드는 제일 뒤로 옮긴다. 해당 과정을 반복한다. 제일 마지막에 남는 카드 1장의 숫자를 리턴해라. 풀이 from collections import deque def deque_process(n): my_deque = deque([i for i in range(1, n + 1)]) while(len(my_deque) != 1): my_deque.popleft() my_deque.rotate(-1) return my_deque[0] 가장 기본에 충실한 방법이다. 카드뭉치를 deque로 만들고, 이를 pop하고 rotate하기를 카드뭉치 사이즈가 1이 될 때까지 반복한다. 그리고 마지막에 남..