본문 바로가기

분류 전체보기202

[Python(파이썬)] 팩토리얼(factorial) 구현 팩토리얼(계승; Factorial) 1부터 구하고자하는 양의 정수 N까지의 정수를 모두 곱한 것 팩토리얼 예시 3! = 3 * 2 * 1 = 6 5! = 5 * 4 * 3 * 2 * 1 = 120 파이썬 팩토리얼 구하는 3가지 방법 1. 재귀 2. for문 3. math.factorial 함수 1. 재귀함수를 통해서 팩토리얼 구현 방법 n! = n * (n-1) * (n-2) * … * 1 이러한 식으로 팩토리얼은 구성되어있기 때문에 n에서 하나씩 값을 뺀 후 다시 함수를 호출해서 곱하게 하면 된다. # 팩토리얼 재귀함수 def factorial_recursion(n): if n > 1: return n * factorial_recursion(n-1) else: return 1 # 출력값 >>> fact.. 2021. 7. 21.
[프로그래머스/Level2] 괄호 변환 (2020 카카오 블라인드) 문제 설명 카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를 컴파일하여 로그를 보니 대부분 소스 코드 내 작성된 괄호가 개수는 맞지만 짝이 맞지 않은 형태로 작성되어 오류가 나는 것을 알게 되었습니다. 수정해야 할 소스 파일이 너무 많아서 고민하던 "콘"은 소스 코드에 작성된 모든 괄호를 뽑아서 올바른 순서대로 배치된 괄호 문자열을 알려주는 프로그램을 다음과 같이 개발하려고 합니다. 용어의 정의 '(' 와 ')' 로만 이루어진 문자열이 있을 경우, '(' 의 개수와 ')' 의 개수가 같다면 이를 균형잡힌 괄호 문자열이라고 부릅니다. 그리고 여기에 '('와 ')'의 괄호의 짝.. 2021. 7. 20.
[프로그래머스/Level2] 프린터 문제 설명 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라면 C D A B 순으로 인쇄하게 됩니다. 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 .. 2021. 7. 19.
[자료구조] 데큐(deque; double-ended queue) 데큐(deque; double-ended queue) 리스트의 양쪽 끝에서 삽입과 삭제를 모두 허용하는 자료의 구조. 이것은 스택과 큐의 자료 구조를 복합한 형태 Deque import 및 생성 from collections import deque # deque 생성 deq = deque() Deque 원소 삽입 # item을 deque 오른쪽 끝에 삽입 deq.append(item) # item을 deque 왼쪽 끝에 삽입 deq.appendleft(item) Deque 원소 삭제 # deque 오른쪽 끝에 있는 item을 pop한 후 삭제 deq.pop() # deque 왼쪽 끝에 있는 item을 pop한 후 삭제 deq.popleft() # item을 deque에서 찾아 삭제 deq.remove(i.. 2021. 7. 19.
[자료구조] 우선순위 큐(Priority Queue) 우선순위 큐(Priority Queue) 들어간 순서에 상관없이 우선순위가 가장 높은 데이터를 먼저 삭제하는 자료구조 스택 : 원소들은 후입 선출 순으로 처리된다. (LIFO; Last In First Out) 큐 : 원소들은 선입 선출 순으로 처리된다. (FIFO; First In First Out) 우선순위 큐를 구현하는 방법 1. List(리스트) : 삽입 - O(1), 삭제 - O(N) 2. Heap(힙) : 삽입 - O(logN), 삭제 - O(logN) 우선순위 큐 import 및 생성 from queue import PriorityQueue # 우선순위 큐 생성 que = PriorityQueue() 우선순위 큐 원소 추가 - .put() que.put(1) que.put(3) que.put.. 2021. 7. 19.
[프로그래머스/Level2] 뉴스 클러스터링 (2018 카카오 블라인드) 문제 설명 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브는 사용자들이 편리하게 다양한 뉴스를 찾아볼 수 있도록 문제점을 개선하는 업무를 맡게 되었다. 개발의 방향을 잡기 위해 튜브는 우선 최근 화제가 되고 있는 "카카오 신입 개발자 공채" 관련 기사를 검색해보았다. 카카오 첫 공채..'블라인드' 방식 채용 카카오, 합병 후 첫 공채.. 블라인드 전형으로 개발자 채용 카카오, 블라인드 전형으로 신입 개발자 공채 카카오 공채, 신입 개발자 코딩 능력만 본다 카카오, 신입 공채.. "코딩 실력만 본다" 카카오 "코딩 능력만으로 2018 신입 개발자 뽑는다" 기사의 제목을 기준으로 ".. 2021. 7. 16.
[프로그래머스/Level2] N개의 최소공배수 문제 설명 두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요. 제한 사항 arr은 길이 1이상, 15이하인 배열입니다. arr의 원소는 100 이하인 자연수입니다. 입출력 예 arr result [2,6,8,14] 168 [1,2,3] 6 나의 풀이 [Python(파이썬)] def lcm(n,m): import math return int(n*m / m.. 2021. 7. 15.
[Python(파이썬)] 세트(set) 세트 (set) 중복된 데이터를 허용하지 않는다. 비순차 자료형, 가변 자료형 인덱스로 접근 불가하다. 항목들을 {} 로 감싸고 각각의 항목은 쉼표(,)로 구분한다. 집합 선언 방법 - set() # 빈 집합 선언 방법 >>> test = set() >>> type(test) >>> test >>> test = {'a','c','a','b','c','d','e'} # set은 중복 된 항목 제거됨 >>> test {'b', 'c', 'a', 'd', 'e'} # 항목 존재 유무 확인 - True, False로 반환 >>> 'a' in test True >>> 1 in test False >>> type(test) ※ 빈 집합은 {}로 선언 불가하다. {}로 선언하면 딕셔너리 타입이 생성된다. 반드시 se.. 2021. 7. 15.
[프로그래머스/Level2] 소수 찾기 문제 설명 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요. 제한사항 numbers는 길이 1 이상 7 이하인 문자열입니다. numbers는 0~9까지 숫자만으로 이루어져 있습니다. "013"은 0, 1, 3 숫자가 적힌 종이 조각이 흩어져있다는 의미입니다. 입출력 예 numbers return "17" 3 "011" 2 입출력 예 설명 예제 #1 [1, 7]으로는 소수 [7, 17, 71]를 만들 수 있습니다. 예제 #2 [0, 1, 1]으로는 소수 [11, .. 2021. 7. 14.
[프로그래머스/Level2] 예상 대진표 (2017 팁스타운) 문제 설명 △△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N번의 참가자끼리 게임을 진행합니다. 각 게임에서 이긴 사람은 다음 라운드에 진출할 수 있습니다. 이때, 다음 라운드에 진출할 참가자의 번호는 다시 1번부터 N/2번을 차례대로 배정받습니다. 만약 1번↔2번 끼리 겨루는 게임에서 2번이 승리했다면 다음 라운드에서 1번을 부여받고, 3번↔4번에서 겨루는 게임에서 3번이 승리했다면 다음 라운드에서 2번을 부여받게 됩니다. 게임은 최종 한 명이 남을 때까지 진행됩니다. 이때, 처음 라운드에서 A번을 가진 참가자는 경쟁자로 생각하는 B번 참가자와 몇 .. 2021. 7. 13.