프로그래머스 14

[프로그래머스] 피보나치 수 (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..

[프로그래머스] 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을 사용했다. 스택의 맨 위에 있는 값이 현재 값과 같은 경우 (연속으로 같은 알파벳..

[프로그래머스] 전화번호 목록 (python)

코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조 programmers.co.kr 👩🏻‍💻 코드 def solution(phone_book): phone_book.sort() for i in range(len(phone_book) - 1): if len(phone_book[i + 1]) >= len(phone_book[i]): if phone_book[i + 1].find(phone_book[i]) == 0: return False return True 📝 정리 오름차순으로 phone_book 정렬 두 개씩 비교하며 앞의 전화번호가 뒤의 ..

[프로그래머스] 스킬트리 (python)

코딩테스트 연습 - 스킬트리 programmers.co.kr 👩🏻‍💻 코드 def solution(skill, skill_trees): answer = 0 for st in skill_trees: idx = 0 flag = True for s in st: if s == skill[idx]: idx += 1 if idx == len(skill): break elif s not in skill: continue else: flag = False break if flag: answer += 1 return answer 📝 정리 효율성 테스트가 존재하지 않기 때문에 일일이 비교하는 방법으로 해결했다. skill_trees 내에 있는 스킬 트리와 skill을 동시에 확인하였다. skill에 존재하는 철자인 경우 ..