목록Python (32)
공부기록
🍀문제 설명 🍀내 풀이 from itertools import permutations def solution(user_id, banned_id): answer = [] cand = list(permutations(user_id, len(banned_id))) for c in cand: if_c = True for i in range(len(c)): # 같은 길이의 문자인지 확인 if len(c[i]) != len(banned_id[i]): if_c = False # *가 아닌 문자가 같은 문자인지 확인 else: temp = [False if (banned_id[i][j] == '*' or c[i][j] == banned_id[i][j]) else True for j in range(len(c[i]))]..
🍀문제 설명 🍀내 풀이 from collections import Counter def solution(want, number, discount): answer = 0 if len(discount) - 10 > 0: n = len(discount)-10+1 else: n = 1 for i in range(n): dic = Counter(discount[i:10+i]) temp = True for j in range(len(want)): if dic[want[j]] != number[j]: temp = False if temp: answer += 1 return answer for구문 돌때마다 Counter 자료형을 새로 만들고, 또 그 안에 for문과 if문이 포함되어 있어서 코드를 작성하면서도 뭔가 시..
🍀문제 설명 🍀문제 설명 참고: https://velog.io/@wlals425315/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-154539-%EB%92%A4%EC%97%90-%EC%9E%88%EB%8A%94-%ED%81%B0-%EC%88%98-%EC%B0%BE%EA%B8%B0 def solution(numbers): answer = [-1]*len(numbers) stack = [] for i in range(len(numbers)): while stack and numbers[stack[-1]] < numbers[i]: answer[stack.pop()] = numbers[i] stack.append(i) return answer stack을 사..
🍀문제 설명 🍀내 풀이(시간초과) from itertools import combinations, product def solution(weights): answer = 0 cand1 = list(combinations(weights, 2)) cand2 = list(product([2,3,4], repeat = 2)) l = len(cand2) for weight in cand1: temp = [(weight[0]*cand2[i][0]) / (weight[1]*cand2[i][1]) for i in range(l)] if 1 in temp: answer += 1 return answer combinations 함수를 이용해서 시소의 양쪽에 앉힐 사람의 무게 조합 리스트를 만들었고, product 함수를 ..
🍀문제 설명 🍀내 풀이 def solution(n, edge): graph = [[] for _ in range(n+1)] # 각 노드마다의 연결 여부 저장 dist = [0 for _ in range(n+1)] # 1번 노드에서 각 노드까지의 거리 # graph에 연결 정보 저장 for e in edge: graph[e[0]].append(e[1]) graph[e[1]].append(e[0]) # 1번과 연결되어 있는 노드를 deque에 추가 deque = [] for i in graph[1]: deque.append((1, i)) # (1번 노드와의 거리, 노드 번호) # 1번 노드는 거리 계산이 필요 없으므로 1로 처리 dist[1] = 1 while len(deque) > 0: ndist, now..
🍀문제 설명 🍀내 풀이 def solution(rows, columns, queries): answer = [] graph = [list(range(1+i*columns, columns+i*columns+1)) for i in range(rows)] for query in queries: x1, y1, x2, y2 = query x1 -=1 ; y1 -=1 ; x2 -=1 ; y2 -=1 ; minnum = 10e9 # 처음 값 저장 temp = graph[x1][y1] # 왼쪽 for j in range(x1, x2): og = graph[j+1][y1] minnum = min(minnum, og) graph[j][y1] = og # 아래쪽 for j in range(y1, y2): og = graph..
🍀문제 설명 문제 설명이 긴데, 요약하자면 - 1번부터 n번까지 순서대로 놓여진 택배상자를 트럭에 실어야 하는데, 배달 순서대로 실어야 함. - 싣는 순서를 맞추기 위해 번호가 안맞는 택배를 보관할 보조 컨테이너 벨트는 스택의 구조(선입후출) - 보조 컨테이너 벨트를 사용해도 원하는 순서가 완성되지 않으면 더 이상 상자를 싣지 않음. 🍀내 풀이 - order 안의 숫자를 하나씩 확인 --> 숫자가 컨베이어 벨트의 가장 낮은 숫자보다 클 경우: 해당 숫자 전까지의 숫자들을 보조 벨트(stack)에 넣고, 컨베이어 벨트 안의 해당 숫자를 없애고 answer에 1을 더한다. --> 숫자가 컨베이어 벨트의 가장 낮은 숫자보다 작을 경우 ㄴ 보조 벨트의 마지막과 같은 숫자라면 answer += 1, 다음 숫자로 ..
🍀문제 설명 🍀내 풀이 def solution(elements): answer = [] temp = elements+elements for i in range(1, len(elements)+1): for j in range(len(elements)): answer.append(sum(temp[j:j+i])) return len(set(answer)) - 원형 수열에서 연속된 부분합을 구해야 하므로, 주어진 리스트의 가장 마지막 원소와 첫번째 원소가 이어져 있을 때의 합도 고려해야 한다. - 따라서 같은 elements 리스트를 두번 이어서 하나의 리스트를 만들고, 1개의 원소부터 len(elements)개의 원소만큼의 부분합을 모두 계산해서 answer에 넣는다. - 최종적으로 answer를 set 자료..
🍀문제 설명 🍀모범답안 참고: https://developnote.tistory.com/26 def solution(n): answer = [[0]*(i+1) for i in range(n)] # 삼각형 틀 만들기 # 3으로 나눴을 때 나머지가 0 -> 아래 방향 # 1 -> 오른쪽 방향 # 2 -> 위쪽 방향 # answer 내 좌표 초기값 x = -1 y = 0 # 채울 숫자의 초기값 num = 1 for i in range(n): for _ in range(i, n): if i % 3 == 0: x += 1 elif i % 3 == 1: y += 1 else: x -= 1 y -= 1 # 높은 칸일수록 y수가 하나씩 적으므로 y에도 1을 빼줌 answer[x][y] = num num += 1 ret..
🍀문제 설명 🍀내 풀이 from itertools import product def solution(users, emoticons): answer = [] sales = [10, 20, 30, 40] # 할인 비율 후보 slist = list(product(sales, repeat=len(emoticons))) # 모든 가능한 할인비율 조합에 대한 중복순열 # 할인비율 조합별로 플러스 서비스 총 가입 명수와 이모티콘 총 구매비용 계산 for sales in slist: join_count = 0 # 이모티콘 플러스 서비스 가입 여부 purchase = 0 # 이모티콘 구매 비용 # 유저별로 이모티콘 구매비용 계산 for user in users: user_e_sum = int(sum([emoticons[..