셀수있는 수량의 순서있는 열거 또는 어떤 순서를 따르는 요소들의 모음을 튜플(tuple)이라고 합니다. n개의 요소를 가진 튜플을 n-튜플(n-tuple)이라고 하며, 다음과 같이 표현할 수 있습니다.
튜플은 다음과 같은 성질을 가지고 있습니다.
원소의 개수가 n개이고, 중복되는 원소가 없는 튜플 (a1, a2, a3, ..., an)
이 주어질 때(단, a1, a2, …, an은 자연수), 이는 다음과 같이 집합 기호 ’{’, ’}‘를 이용해 표현할 수 있습니다.
예를 들어 튜플이 (2, 1, 3, 4)인 경우 이는
와 같이 표현할 수 있습니다. 이때, 집합은 원소의 순서가 바뀌어도 상관없으므로
는 모두 같은 튜플 (2, 1, 3, 4)를 나타냅니다.
특정 튜플을 표현하는 집합이 담긴 문자열 s가 매개변수로 주어질 때, s가 표현하는 튜플을 배열에 담아 return 하도록 solution 함수를 완성해주세요.
s | result |
---|---|
"{{2},{2,1},{2,1,3},{2,1,3,4}}" |
[2, 1, 3, 4] |
"{{1,2,3},{2,1},{1,2,4,3},{2}}" |
[2, 1, 3, 4] |
"{{20,111},{111}}" |
[111, 20] |
"{{123}}" |
[123] |
"{{4,2,3},{3},{2,3,4,1},{2,3}}" |
[3, 2, 4, 1] |
문제 예시와 같습니다.
문제 예시와 같습니다.
(111, 20)을 집합 기호를 이용해 표현하면 {{111}, {111,20}}이 되며, 이는 {{20,111},{111}}과 같습니다.
def solution(s):
s = s[2:-2].split('},{')
for i in range(len(s)):
s[i] = set(map(int, s[i].split(',')))
s.sort(key=len)
res = [list(s[0])[0]]
prev =s[0]
for i in range(1, len(s)):
res.append(list(s[i] - s[i-1])[0])
return res
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다.
섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)
Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요.
scoville | K | return |
---|---|---|
[1, 2, 3, 9, 10, 12] | 7 | 2 |
모든 음식의 스코빌 지수가 7 이상이 되었고 이때 섞은 횟수는 2회입니다.
import heapq as hq
def solution(scoville, K):
hq.heapify(scoville)
cnt = 0
while True:
first = hq.heappop(scoville)
if first > K:
break
if len(scoville) == 0:
return -1
second = hq.heappop(scoville)
hq.heappush(scoville, first + second * 2)
cnt += 1
return cnt
hq.heapify(list)
: list heapify !!!
문제 설명
한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.
각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.
numbers | return |
---|---|
17 | 3 |
011 | 2 |
예제 #1 [1, 7]으로는 소수 [7, 17, 71]를 만들 수 있습니다.
예제 #2 [0, 1, 1]으로는 소수 [11, 101]를 만들 수 있습니다.
answer = 0
def solution(numbers):
size = len(numbers)
ch = [0] * size
ch2 = dict()
def DFS(L, num):
global answer
if L == size:
num = int(num)
if num > 1 and num not in ch2:
ch2[num] = 0
for v in range(2, num):
if num % v == 0:
break
else:
answer += 1
else:
for v in range(size):
if ch[v] == 0:
ch[v] = 1
DFS(L+1, num + numbers[v])
ch[v] = 0
else:
DFS(L+1, num)
DFS(0, '')
return answer