알고리즘

import collections def solution(id_list, report, k): answer = [0 for x in range(len(id_list))] user = collections.defaultdict(set) for r in report: tmp = r.split() reporter = tmp[0] reported = tmp[1] user[reported].add(reporter) for u in user.keys(): if len(user[u]) >= k: for s in list(user[u]): answer[id_list.index(s)] += 1 return answer 1. answer에 id_list의 길이(유저 수)만큼 0을 채워준다. // 반환할 때 인덱스를 위해 ..
def solution(a, b): return sum(A*B for A, B in zip(a,b)) 이거 풀기 바로 직전에 음양더하기 라는 비슷한 유형의 문제를 푼 기억이 있어서 같은 방식으로 풀었다. 한 줄로 완성되니까 기분 좋다.
def solution(absolutes, signs): answer = 0 for i in range(len(absolutes)): if signs[i]: answer += absolutes[i] else: answer -= absolutes[i] return answer 인덱스 0부터 len(absolutes)-1까지 하나씩 접근하면서 양이면 더해주고 음이면 빼준다. => 한 줄이면 끝나는 풀이인데 좀 길게한 느낌도 있다. 너무 짧은 코드도 읽기 어렵다면 좋은 건 아니지만.. 새로운 도구들도 많이 사용해봐야겠다. zip같은 것도 많이 사용해보구
def solution(numbers): return sum(range(10)) - sum(numbers) 완전 간결하다. 어차피 합을 구하는 거니까 이게 제일 베스트일 것 같다. solution = lambda x: sum(range(10)) - sum(x) 람다로 더더 줄여버렸다. def solution(numbers): return sum([i for i in range(10) if i not in numbers]) 문제를 그대로 넣어버린 코드다. 의도가 한눈에 보인다. 멋있다.
def solution(numbers): answer = 0 allNum = [0,1,2,3,4,5,6,7,8,9] for n in numbers: allNum.remove(n) for n in allNum: answer += n return answer ■ 사용 변수: allNum(0~9까지의 숫자가 저장된 리스트) 1. numbers에 저장된 변수를 allNum에서 remove해준다 2. 남은 수들을 각각 더해준다. => 파이썬에 sum함수가 있다는 걸 까먹었다. 문제를 풀고난 후 더 좋은 풀이가 없을지 고민하는 과정을 자꾸 까먹는다. 문제를 풀었다고 좋아하지말고 다른 방법도 생각해보자 좀
def solution(board, moves): answer = 0 stack = [0] for m in moves: for i in range(len(board)): if (board[i][m-1] != 0): stack.append(board[i][m-1]) board[i][m-1] = 0 if (stack[-1] == stack[-2]): stack.pop() stack.pop() answer += 2 break return answer 간결하다. stack에 0을 넣어놓고 시작하여 stack[-2]가 없는 경우를 고려하지 않아도 되는 것도 참신한 방법인 것 같다. 굳이 -1을 빼서 비교해볼 필요도 없고 좋은 것 같다. def solution(board, moves): cols = list(map..
def isEmpty(stack): return (len(stack) == 0) def solution(board, moves): answer = 0 b_stack = {} stack = [] height = len(board) width = len(board[0]) for w in range(width): tmp = [] for h in range(height-1, -1, -1): if (board[h][w] == 0): break else: tmp.append(board[h][w]) b_stack[w+1] = tmp for m in moves: if (not isEmpty(b_stack[m])): item = b_stack[m].pop() if (not isEmpty(stack) and stack[-..
1~45숫자 6개의 숫자 고르기 6개:1등/ 5개:2등/ 4개:3등/ ... / 2개: 5등/ 1개:6등/ 0개:6등 0은 맞출 수도 있고 못맞출 수도 있다. def solution(lottos, win_nums): rank = [6,6,5,4,3,2,1] cnt_0 = lottos.count(0) # 0 개수 세기 ans = 0 for x in win_nums: if x in lottos: ans += 1 return rank[cnt_0+ans], rank[ans] print(solution([1,2,3,4,0,0], [1,2,3,4,5,6])) 랭크를 저렇게 배열 인덱스로 고를 수 있도록 하는 것도 매력적인 방법인 것 같다. 보기도 쉽고 말이다. def solution(lottos, win_nums)..
퀵 정렬 partition함수에 대한 각기 다른 코드를 분석해보겠습니다. partition함수는 배열과 left, right인덱스를 받아 한 단계의 퀵정렬을 수행한 후 피봇인덱스를 반환합니다. 일단 가장 쉬운 방법입니다. 1. Algorithm Partition(arr, left, right) 2. Input: 정렬할 배열, 맨 왼쪽 인덱스, 맨 오른쪽 인덱스 3. Output: high(피봇의 현재 인덱스) 4. pivot
fladi
'알고리즘' 카테고리의 글 목록 (14 Page)