[프로그래머스] 124 나라의 숫자
·
Algorithm
문제 풀이from collections import dequedef solution(n): #리스트 앞쪽에 넣기 위해서 deque 선언 res = deque() def recur_124(n) : quo = n // 3 rem = n % 3 #재귀함수 내부에서 res 사용위해 nonlocal nonlocal res #재귀함수 종료 조건 : 3으로 나누다가 몫이 0일때 if n == 0 : return ''.join(res) if rem == 1 : res.appendleft('1') return recur_124(quo) elif rem =..
[My IT : Article] 알고리즘 패러다임 정리(Brute Force, Greedy, Divide & Conquer, DP, Backtracking)
·
My IT/Article
들어가며알고리즘 문제들을 풀다 보면, 쉬운 문제들은 생각나는 대로 풀면 정답이 맞곤 하지만, 어느 정도 수준이 있는 문제를 풀기 위해서는 구현도 중요하지만 알고리즘 패러다임을 적극적으로 사용하여 시간복잡도를 계산하며 효율적인 알고리즘을 찾는 과정이 더 중요하다는 걸 깨닫게 되곤 한다. 거의 모든 문제에서 사용되는 알고리즘 패러다임을 모아서 정리해 보았다. 1. Brute Force(완전탐색)말 그대로 "다 해보는" 방법이다. 가능한 모든 경우의 수를 탐색해서 정답을 찾는 방식으로, 가장 쉽게 생각해 낼 수 있고 단순하지만 데이터가 커질수록 기하급수적으로 계산에 필요한 시간이 늘어난다는 단점이 있다. When ?● 데이터 크기가 작을 때(n ● 다른 최적화 방법이 떠오르지 않을 때● 정답을 검증하는 용도..
[프로그래머스] 프렌즈4블록
·
Algorithm
문제쉽게 말하자면, 애니팡 블록을 재현하는 알고리즘을 구현하는 것이다. 풀이def solution(m, n, board): board = [list(row) for row in board] cnt = 0 while True: check_board = [[0] * n for _ in range(m)] #4개의 블록 겹치는지 검사 for i in range(m-1): for j in range(n-1): if board[i][j] is not None and board[i][j] == board[i + 1][j] == board[i][j+1] == board [i+1][j+1] : ..
[프로그래머스] 마법의 엘리베이터
·
Algorithm
문제 마법의 엘리베이터라는 설정이 붙어있긴 하지만, 각 자릿수를 0으로 만드는 최소 이동횟수를 구하는 문제이다. 풀이def solution(storey): num = storey cnt = 0 while num : #현재 1의 자리 digit = num % 10 #다음에 들어갈 num num = num // 10 #num % 10 : 다음 10의 자릿수 #자릿수가 5보다 크면 : 올라가기가 유리(상위 자릿수에 1 더함) if digit > 5 or (digit == 5 and (num % 10 + 1) > 5): cnt += (10 - digit) num += ..
[프로그래머스] 프로세스
·
Algorithm
문제 풀이from collections import deque#큐를 순회하여 최대 우선순위 찾는 함수def max_queue(queue) : max = float('-inf') #queue 순회 for i, (_, priority) in enumerate(queue) : if priority > max : max = priority return maxdef solution(priorities, location): # location(key) : priorities(value)값을 가지는 딕셔너리 생성 priorities_dict = {index : value for index, value in enumerate(priorities)..
[My IT : Article] 코딩 테스트에서 자주 썼던 메소드 모음 / 간단 설명 (max/min, sorted, itertools, collections, bisect, heapq)
·
My IT/Article
※찾으실게 있으시다면 Ctrl + F 활용하시면 편합니다 ! ● max()/min()문자 그대로 최댓값 / 최솟값을 찾아주는 메소드이다.max([1,2,3]) #3min([1,2,3]) #1max(27, 10) #27min(27, 10) #10● sorted()iterable에 대해서 정렬하는 메소드이다. 반환 결과는 무조건 리스트로 반환되며, 파라미터를 통해 정렬 방식을 정할 수 있다. ◎ reverse : True면 내림차순, False면 오름차순(기본은 False)◎ key : 정렬되는 기준, (ex. 딕셔너리에서 값을 기준으로 정렬하고 싶을 때) - key 예시arr = ["banana", "apple", "kiwi"]# 길이 기준 정렬sorted(arr, key=len)# ['kiwi', 'a..