Python
-
문제 (링크) 직선상에 1km 간격으로 배치되어 있는 도시들의 나라 flatland 도시들 중 몇몇은 space station를 가지고 있음 space station으로부터 도시들의 거리들 중 최댓값을 구하기 풀이 def flatlandSpaceStations(n, c): max_gap = 0 if len(c)==1: # end of cities or middle return max(n-c[0]-1, c[0]) c = sorted(c) for i in range(len(c)-1): if c[i+1]-c[i] >max_gap: max_gap=c[i+1]-c[i] return max(max_gap//2, n-c[-1]-1, c[0]) max 함수를 잘 활용해야 하는 문제였다. space station의 위치..
[hackerrank] Flatland Space Stations (Python)문제 (링크) 직선상에 1km 간격으로 배치되어 있는 도시들의 나라 flatland 도시들 중 몇몇은 space station를 가지고 있음 space station으로부터 도시들의 거리들 중 최댓값을 구하기 풀이 def flatlandSpaceStations(n, c): max_gap = 0 if len(c)==1: # end of cities or middle return max(n-c[0]-1, c[0]) c = sorted(c) for i in range(len(c)-1): if c[i+1]-c[i] >max_gap: max_gap=c[i+1]-c[i] return max(max_gap//2, n-c[-1]-1, c[0]) max 함수를 잘 활용해야 하는 문제였다. space station의 위치..
2023.11.19 -
문제 (링크) N개의 정수를 가진 같은 길이의 배열 A, B 가 주어짐 A[i], B[j]가 같은 경우에 대해 (i,j) 를 Beautiful pair 라고 하며 이 beautiful pairs의 집합을 beautiful set이라고 함 beautiful set 내에 i 혹은 j끼리 중복이 없다면 pairwise disjoint라고 부름 B 배열의 원소 1개를 바꾸어 pairwise disjoint beautiful set의 크기를 최대로 만들어야 함 이때 B의 원소를 바꾸는 것은 옵션이 아닌 필수! pairwise disjoint beautiful pairs를 정답으로 return 풀이 def beautifulPairs(A, B): # Write your code here answer = 0 aobo ..
[hackerrank] Beautiful pairs (Python)문제 (링크) N개의 정수를 가진 같은 길이의 배열 A, B 가 주어짐 A[i], B[j]가 같은 경우에 대해 (i,j) 를 Beautiful pair 라고 하며 이 beautiful pairs의 집합을 beautiful set이라고 함 beautiful set 내에 i 혹은 j끼리 중복이 없다면 pairwise disjoint라고 부름 B 배열의 원소 1개를 바꾸어 pairwise disjoint beautiful set의 크기를 최대로 만들어야 함 이때 B의 원소를 바꾸는 것은 옵션이 아닌 필수! pairwise disjoint beautiful pairs를 정답으로 return 풀이 def beautifulPairs(A, B): # Write your code here answer = 0 aobo ..
2023.10.09 -
문제 (링크) 레나는 코딩 대회를 나가기 전에 여러 번의 사전 콘테스트에 참가한다 그녀의 운은 0으로 시작해서, 사전 콘테스트를 치를 때마다 운을 적립한다고 믿는다 두 개의 어레이는 각각 amount of luck 과 콘테스트의 중요도를 가리킨다 사전 콘테스트에 지면 운은 증가하고, 이기면 운이 감소한다 콘테스트의 중요도는 1이면 중요함, 0이면 중요하지 않음으로 구분한다 주어진 숫자 k는 '중요한 콘테스트'를 질 수 있는 최대 횟수이다 풀이 def luckBalance_1(k, contests): # Write your code here answer=0 candi = [] # 중요한 콘테스트만 담을 리스트 for i in contests: if i[1] ==0: answer+=i[0] # 중요하지 않은..
[hackerrank] Luck Balance (Python)문제 (링크) 레나는 코딩 대회를 나가기 전에 여러 번의 사전 콘테스트에 참가한다 그녀의 운은 0으로 시작해서, 사전 콘테스트를 치를 때마다 운을 적립한다고 믿는다 두 개의 어레이는 각각 amount of luck 과 콘테스트의 중요도를 가리킨다 사전 콘테스트에 지면 운은 증가하고, 이기면 운이 감소한다 콘테스트의 중요도는 1이면 중요함, 0이면 중요하지 않음으로 구분한다 주어진 숫자 k는 '중요한 콘테스트'를 질 수 있는 최대 횟수이다 풀이 def luckBalance_1(k, contests): # Write your code here answer=0 candi = [] # 중요한 콘테스트만 담을 리스트 for i in contests: if i[1] ==0: answer+=i[0] # 중요하지 않은..
2023.09.23 -
문제 (링크) 문제로 트리, value1, value2가 주어진다 value1, value2가 가지고 있는 공통의 부모 노드 중에 가장 낮은 (루트로부터 멀리 떨어진, depth가 깊은) 노드를 반환해야 한다 위 이미지의 노드 4는 노드 5 밑에 들어가있어야 되는데.. 찾아보니 오류가 맞는 것 같다 풀이 def lca(root, v1, v2): if v1>v2: v1, v2 = v2, v1 # set the v2 for smaller number curr = root if (curr.info >=v1) & (curr.info
[hackerrank] Binary Search Tree : Lowest Common Ancestor (Python)문제 (링크) 문제로 트리, value1, value2가 주어진다 value1, value2가 가지고 있는 공통의 부모 노드 중에 가장 낮은 (루트로부터 멀리 떨어진, depth가 깊은) 노드를 반환해야 한다 위 이미지의 노드 4는 노드 5 밑에 들어가있어야 되는데.. 찾아보니 오류가 맞는 것 같다 풀이 def lca(root, v1, v2): if v1>v2: v1, v2 = v2, v1 # set the v2 for smaller number curr = root if (curr.info >=v1) & (curr.info
2023.08.16 -
문제 (링크) 괄호 타입에는 [], {}, ()가 있다 balanced bracket이란? 짝이 없는 괄호가 없고, 괄호의 부분집합이 짝이 맞는 괄호안에 들어가있어야 한다 [ 가 열려있으면 같은 타입의 괄호로 닫히기 전까지 다른 타입의 닫힘 괄호가 올 수 없다는게 포인트 풀이 def isBalanced(s): # Write your code here pairs= {'[':']', '{':'}', '(':')'} stacks = [] for i in s: if i in pairs: stacks.append(pairs[i]) else: try: if i != stacks.pop(): return "NO" except: return "NO" if len(stacks)==0: return "YES" else: ..
[hackerrank] balanced brackets (Python)문제 (링크) 괄호 타입에는 [], {}, ()가 있다 balanced bracket이란? 짝이 없는 괄호가 없고, 괄호의 부분집합이 짝이 맞는 괄호안에 들어가있어야 한다 [ 가 열려있으면 같은 타입의 괄호로 닫히기 전까지 다른 타입의 닫힘 괄호가 올 수 없다는게 포인트 풀이 def isBalanced(s): # Write your code here pairs= {'[':']', '{':'}', '(':')'} stacks = [] for i in s: if i in pairs: stacks.append(pairs[i]) else: try: if i != stacks.pop(): return "NO" except: return "NO" if len(stacks)==0: return "YES" else: ..
2023.06.27 -
문제 (링크) 아이스크림 가게에 간 두 친구, 출금한 돈에 딱 맞게 두 개의 아이스크림을 사려고 함 쓸 수 있는 돈과 각 아이스크림의 가격이 담긴 리스트가 주어짐 가격표의 index는 1부터 시작! 가격에 맞게 살 수 있는 아이스크림 가격의 index를 return 파이썬 풀이 def icecreamParlor(m, arr): # Write your code here pick = [] for i, v in enumerate(arr[:-1]): for j, w in enumerate(arr[i+1:]): if v+w == m: pick.extend([i+1, i+j+2]) return pick 굳이 가격표를 처음부터 순회할 필요가 없다~
[hackerrank] Ice Cream Parlor (Python)문제 (링크) 아이스크림 가게에 간 두 친구, 출금한 돈에 딱 맞게 두 개의 아이스크림을 사려고 함 쓸 수 있는 돈과 각 아이스크림의 가격이 담긴 리스트가 주어짐 가격표의 index는 1부터 시작! 가격에 맞게 살 수 있는 아이스크림 가격의 index를 return 파이썬 풀이 def icecreamParlor(m, arr): # Write your code here pick = [] for i, v in enumerate(arr[:-1]): for j, w in enumerate(arr[i+1:]): if v+w == m: pick.extend([i+1, i+j+2]) return pick 굳이 가격표를 처음부터 순회할 필요가 없다~
2023.06.25 -
문제 (링크) 주어진 문자열의 각 알파벳 개수가 모두 같으면 YES 리턴 문자열에서 문자 하나를 뺀 뒤 각 알파벳 개수가 모두 같으면 YES 리턴 이 외의 경우 문자열은 not valid, NO 리턴 파이썬 풀이 def isValid(s): # Write your code here orig_list = list(s) unique_list = list(set(s)) nums = [] for i in unique_list: nums.append(orig_list.count(i)) nums.sort() #ascending ifnum_1= [i for i in nums] ifnum_1[-1] = ifnum_1[-1]-1 if (len(set(nums))==1)| (len(set(ifnum_1))==1): ret..
[hackerrank] Sherlock and the Valid String (Python)문제 (링크) 주어진 문자열의 각 알파벳 개수가 모두 같으면 YES 리턴 문자열에서 문자 하나를 뺀 뒤 각 알파벳 개수가 모두 같으면 YES 리턴 이 외의 경우 문자열은 not valid, NO 리턴 파이썬 풀이 def isValid(s): # Write your code here orig_list = list(s) unique_list = list(set(s)) nums = [] for i in unique_list: nums.append(orig_list.count(i)) nums.sort() #ascending ifnum_1= [i for i in nums] ifnum_1[-1] = ifnum_1[-1]-1 if (len(set(nums))==1)| (len(set(ifnum_1))==1): ret..
2023.06.21 -
문제 (링크) 플레이어 1, 플레이어 2가 번갈아 가며 탑 부수기 게임을 진행 각 플레이어는 최적의 방식으로 게임을 진행함 input : n (int, 탑의 개수) /m (int, 탑의 높이) 각 탑은 탑의 높이를 균등하게 나눌 수 있는 수만큼 층을 감소시킬 수 있음 각 탑의 높이가 모두 1이 되게 만드는 플레이어가 승리 파이썬 풀이 def towerBreakers(n, m): # Write your code here if m==1: return 2 elif n%2 ==0: return 2 elif n%2 ==1: return 1 문제에서 '최적의 방법으로 게임을 진행'한다고 했고, 균등하게 나눌 수 있는 수만큼 층을 나눈다고 설명해 탑의 층수의 약수로만 나눌 수 있는 것처럼 처음에 생각했다. 처음에는 ..
[hackerrank] Tower Breakers (python)문제 (링크) 플레이어 1, 플레이어 2가 번갈아 가며 탑 부수기 게임을 진행 각 플레이어는 최적의 방식으로 게임을 진행함 input : n (int, 탑의 개수) /m (int, 탑의 높이) 각 탑은 탑의 높이를 균등하게 나눌 수 있는 수만큼 층을 감소시킬 수 있음 각 탑의 높이가 모두 1이 되게 만드는 플레이어가 승리 파이썬 풀이 def towerBreakers(n, m): # Write your code here if m==1: return 2 elif n%2 ==0: return 2 elif n%2 ==1: return 1 문제에서 '최적의 방법으로 게임을 진행'한다고 했고, 균등하게 나눌 수 있는 수만큼 층을 나눈다고 설명해 탑의 층수의 약수로만 나눌 수 있는 것처럼 처음에 생각했다. 처음에는 ..
2023.06.18