본문 바로가기

CodingTest/Programmers

(66)
[ Programmers / 파이썬 ] 정수 삼각형 Dynamic Programming 풀이 1. (실패, 풀이 소요 시간 15분) def solution(triangle): answer = 0 h = len(triangle) dp = [[0]*i for i in range(1,h+1)] dp[0] = triangle[0] for i in range(1, h): for j in range(i): if j == 0: dp[i][j] = dp[i-1][j] + triangle[i][j] elif j == h: dp[i][j] = dp[i-1][j-1] + triangle[i][j] else: dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]) + triangle[i][j] answer = max(dp[h-1]) return answer ..
[ 프로그래머스 ] 두 큐 합 같게 만들기 1차시도. 풀이시간 15분. 대부분 시간초과 def solution(queue1, queue2): answer = -1 n = len(queue1) + len(queue2) cnt = 0 target = (sum(queue1) + sum(queue2))//2 print(target, sum(queue1), sum(queue2)) while sum(queue1) != target: if cnt == n: break caseA = abs(sum(queue1) + queue2[0] - sum(queue2[1:])) caseB = abs(sum(queue2) + queue1[0] - sum(queue1[1:])) if caseA < caseB: queue1.append(queue2.pop(0)) else: qu..
[ 프로그래머스 ] 성격 유형 검사하기 풀이 소요 시간 18분 생각보다 깔끔하게 풀렸다. def solution(survey, choices): answer = '' dict = {'R': 0, 'T': 0, 'C': 0, 'F': 0, 'J': 0, 'M': 0, 'A': 0, 'N': 0} for char, choi in zip(survey, choices): a, b = char[0], char[1] if choi 4: dict[b] += (choi - 4) for i in range(4): a = list(dict.items())[2*i] b = list(dict.items())[2*i+1] if a[1] ..
[ 프로그래머스 ] 양궁대회 보호되어 있는 글입니다.
[ 프로그래머스 ] 퍼즐 조각 채우기 사실 문제 푸는데 집중을 못 했다.. 아침에 뉴스를 보고 왔더니 계속 생각나면서 여러 생각이 났다. 계획한 45분 내에 푸는 것 실패. 시간 지났어도 더 풀어보려고 했는데 dfs부분 순간 헷갈리면서 더 진행할 마음이 안 나서 그냥 풀이 보고 공부하기로 했다. from collections import deque def dfs(blocks, depth): if depth == len(blocks): return # 이 아래 부분을 구현하다가 그냥 포기했다. for b in blocks: dfs(blocks, depth+1) def solution(game_board, table): answer = -1 dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] # 블럭 찾아서 모양대로 배열에 넣기..
[ 프로그래머스 ] 할인 행사 오.. 5분 컷. def solution(want, number, discount): answer = 0 for i in range(len(discount) - sum(number) + 1): check = [] product = discount[i:i+sum(number)] for w in want: check.append(product.count(w)) if check == number: answer += 1 return answer 그런데 효율성 측면에서 떨어지나.. 시간이 꽤 오래 소요되는 것 같다. 그래서 다른 분들 풀이 체크. def solution(want, number, discount): basket = 0 for i in range(len(want)): basket += number[i..
[ 프로그래머스 ] 혼자 놀기의 달인 처음에 문제가 눈에 잘 안 들어와서 당황했다. 설명식의 문제가 간만에 나와서 약간 놀라 흠칫했던 것 같다. def solution(cards): groups = [] visited = [False] * len(cards) for i in range(len(cards)): if not visited[i]: k = cards[i] group = [] while True: if visited[cards[k-1]-1] == True: break group.append(cards[k-1]) visited[cards[k-1]-1] = True k = cards[k-1] groups.append(group) groups.sort(key=len, reverse=True) answer = len(groups[0]) * ..
[ 프로그래머스 ] 아이템 줍기
[ 프로그래머스 ] 단어 변환 from collections import deque def solution(begin, target, words): if target not in words: # 아예 target없는 경우 미리 리턴 return 0 q = deque([(begin, 0)]) while q: x, cnt = q.popleft() if x == target: return cnt for i in range(len(words)): diff = 0 word = words[i] for j in range(len(x)): if x[j] != word[j]: diff += 1 if diff == 1: q.append((word, cnt + 1)) return 0 : 문자열 변환하면, 하나하나 새로 만들어주며 조건에 맞는지 체크를 하..
[ 프로그래머스 ] 게임 맵 최단거리 from collections import deque dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def bfs(a, b, visited, maps, n, m): global dx, dy q = deque([(a, b)]) visited[a][b] = 1 while q: x, y = q.popleft() for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0