알고리즘 16

[프로그래머스] 피보나치 수 (python)

코딩테스트 연습 - 피보나치 수 피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 예를들어 F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) = programmers.co.kr 👩🏻‍💻 코드 def fibo(n): arr = [] for i in range(n): if i < 2: arr.append(1) else: arr.append(arr[i - 1] + arr[i - 2]) return arr[n - 1] def solution(n): answer = fib..

[프로그래머스] 최댓값과 최솟값 (python)

코딩테스트 연습 - 최댓값과 최솟값 문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요. 예를 programmers.co.kr 👩🏻‍💻 코드 def solution(s): s_list = list(map(int, s.split())) return str(min(s_list)) + ' '+ str(max(s_list)) 📝 정리 프로그래머스에서 Level 2에 있는 문제들을 모두 풀기 위해 풀은 문제 ! string로 들어오는 문자열을 int형 list로 변환시킨 후, min과 max를 str 형태로 반환해주면 되었다.

[프로그래머스] 영어 끝말잇기 (python)

코딩테스트 연습 - 영어 끝말잇기 3 ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"] [3,3] 5 ["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"] [0,0] programmers.co.kr 👩🏻‍💻 코드 def solution(n, words): word_set = {words[0]} n_cnt = [0] * (n + 1) n_cnt[1] += 1 for i in range..

[프로그래머스] 가장 큰 정사각형 찾기 (python)

코딩테스트 연습 - 가장 큰 정사각형 찾기 [[0,1,1,1],[1,1,1,1],[1,1,1,1],[0,0,1,0]] 9 programmers.co.kr 👩🏻‍💻 코드 def solution(board): answer = board[0][0] for i in range(1, len(board)): for j in range(1, len(board[i])): if board[i][j] == 1: board[i][j] = 1 + min(board[i-1][j-1], board[i-1][j], board[i][j-1]) answer = max(answer, board[i][j]) return answer**2 📝 정리 DP 방식으로 풀면 간단하게 풀리는 문제였다. 나는 아이디어가 생각 안 나서 찾아봤지만.. ..

[프로그래머스] 올바른 괄호 (python)

코딩테스트 연습 - 올바른 괄호 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 programmers.co.kr 👩🏻‍💻 코드 def solution(s): stack = [] for c in s: if c==')': if len(stack)==0: return False top = stack.pop() if top != '(': return False elif c == '(': stack.append(c) if len(stack) > 0: return False return True 📝 정리 여는 괄호'(' 일 경우, stac..

[백준] 11723 - 집합 (python)

11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net 👩🏻‍💻 코드 import sys M = int(sys.stdin.readline().rstrip()) S = set() for i in range(M): line = sys.stdin.readline().rstrip().split() command = line[0] if command == 'all': S = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20} elif command == 'empty': S = set()..

Algorithm/백준 2021.10.04

[백준] 9465 - 스티커 (python)

9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net 👩🏻‍💻 코드 import sys T = int(sys.stdin.readline().rstrip()) for _ in range(T): n = int(sys.stdin.readline().rstrip()) dp = [[0 for col in range(n + 1)] for row in range(2)] possible = [[True for col in range(n + 1)] for row in range(2)] num = [list(map(int..

Algorithm/백준 2021.10.04

[프로그래머스] n진수 게임 (python)

코딩테스트 연습 - [3차] n진수 게임 N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0 programmers.co.kr 👩🏻‍💻 코드 def convert(n, base): T = "0123456789ABCDEF" q, r = divmod(n, base) if q == 0: return T[r] else: return convert(q, base) + T[r] def solution(n, t, m, p): MAX = t * m + 1 num_list = [] for i in range(MAX): if len(convert(i, n)) > 1: num_list +=..

[프로그래머스] 압축 (python)

코딩테스트 연습 - [3차] 압축 TOBEORNOTTOBEORTOBEORNOT [20, 15, 2, 5, 15, 18, 14, 15, 20, 27, 29, 31, 36, 30, 32, 34] programmers.co.kr 👩🏻‍💻 코드 from string import ascii_uppercase def solution(msg): answer = [] alpha_list = list(ascii_uppercase) alpha_dict = {} for i in range(26): alpha_dict[alpha_list[i]] = i + 1 start = 0 end = 1 idx = 27 w = '' c = '' msg += ' ' while True: for i in range(end, len(msg) +..

[프로그래머스] 짝지어 제거하기 (python)

코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 programmers.co.kr 👩🏻‍💻 코드 def solution(s): stack = [] for i in range(len(s)): if stack and stack[-1] == s[i]: stack.pop() else: stack.append(s[i]) return 0 if stack else 1 📝 정리 연속으로 같은 알파벳이 나오게 되면 2개를 한 번에 제거하면 된다. 따라서 stack을 사용했다. 스택의 맨 위에 있는 값이 현재 값과 같은 경우 (연속으로 같은 알파벳..