본문 바로가기

알고리즘

(138)
[알고리즘] 백준 9050 / python, dp https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 www.acmicpc.net 1 -> 1개 2 -> 1+1, 2 -> 2개 3 -> 1+1+1, 1+2, 2+1, 3 -> 4개 4 -> 1+1+1+1, 1+1+2, 1+2+1, 2+1+1, 1+3, 3+1, 2+2 -> 7개 5 -> 23개 ... f(n) = f(n-3) + f(n-2) + f(n-1)의 규칙성을 가진다. test_case = int(..
[알고리즘] 프로그래머스 비밀지도 / python, 비트연산자 https://programmers.co.kr/learn/courses/30/lessons/17681 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 구구절절한.. 내코드 trans함수에서 2진수 변환 한뒤에, 1이 들어있는지 하나하나 비교했다. def trans(n, num): if num == 1: return '0'*(n-1) + '1' if num == 0: return '0'*n ret = '' while True: if num % 2 == 0: ret += '0' else: ret += '1' num //= 2 if num == 1: ret +=..
[알고리즘] 프로그래머스 프렌즈4블록 / python https://programmers.co.kr/learn/courses/30/lessons/17679 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ✔ 풀이 한 turn에서 없앨 수 있는 블록을 한번에 모아모아서 없애기 -> 밑으로 내리기 겹쳐져 있는 블록을 위해서 0으로 만드는 작업을 lst배열에 모아 한번에 한다. 블록을 모으는 lst배열이 비어있다면 작업들을 끝내고 0의 갯수(=없어진 블록의 갯수)를 센다. check 함수 👉 board의 모든 좌표에서 ➡ ↘ ⬇ 좌표를 확인하고 set에 넣어서 4개 모두 같은 값인지 확인 del_down 함수 👉 ..
[알고리즘] 프로그래머스 뉴스 클러스터링 / python https://programmers.co.kr/learn/courses/30/lessons/17677 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ✔ 풀이 lower함수로 전체 소문자 만들어주기 isalpha함수로 알파벳이 아닌 문자 제거 def solution(str1, str2): m1, m2 = [], [] str1 = str1.lower() str2 = str2.lower() for i in range(len(str1)-2): if str1[i:i+2].isalpha(): m1.append(str1[i:i+2]) if str1[len(str1)-..
[알고리즘] 프로그래머스 징검다리 건너기 / python https://programmers.co.kr/learn/courses/30/lessons/64062 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr ✔ 풀이 디딤돌의 크기가 3억으로 매우 크고, 건널 니니즈 친구들의 수도 무제한 이므로 탐색시간이 짧은 이진 탐색을 사용한다. 이진 탐색을 할 대상은 니니즈 친구들의 수 이다. MIN ~ MAX의 범위를 줄여가면서 탐색한다. check함수에서 디딤돌 - 건넌 니니즈수 가 0보다 작을 때 ck값을 1증가시키고, 0보다 크다면 연속이 아니므로 ck에 다시 0을 넣는다. 크기가 0인 디딤돌이 연속으로 k개 나타날 ..
[알고리즘] 프로그래머스 튜플 / python https://programmers.co.kr/learn/courses/30/lessons/64065 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📌풀이 과정 맨앞 '{{'와 맨뒤 '}}'를 잘라준다. 그리고 '},{'을 기준으로 split하면 괄호문자가 모두 사라진다. s는 현재 ','를 포함한 문자열 원소들이다. 👉[ '1', '1,2', '1,2,3' ] 반복문에 들어오는 원소마다 ','을 기준으로 split해준다. 👉[ '1, 2' ]가 들어온다면 [ '1', '2' ]로 만든다. answer 배열에 차례대로 append해준다. def solut..
[알고리즘] 프로그래머스 크레인 인형뽑기 게임 / python https://programmers.co.kr/learn/courses/30/lessons/64061 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(board, moves): answer = 0 ret = [] for move in moves: for i in range(len(board)): if board[i][move-1]: if ret and ret[-1] == board[i][move-1]: ret.pop() board[i][move-1] = 0 answer += 2 break else: ret.append(board[i]..
[알고리즘] 파이썬 시간복잡도 정리 Big-O 표기 1. O(1) 상수시간 입력값 n이 주어졌을 때, 알고리즘이 문제를 해결하는데 오직 한단계만 거침 2. O(log n) 로그시간 입력값 n이 주어졌을 때, 문제를 해결하는데 필요한 단계들이 연산마다 특정 요인에 의해 줄어듬 3. O(n) 직선적 시간 문제를 해결하기 위한 단계의 수와 입력값 n이 1:1 관계를 가짐 4. O(n^2) 2차 시간 문제를 해결하기 위한 단계의 수는 입력값 n의 제곱 5. O(c^n) 지수 시간 문제를 해결하기 위한 단계의 수는 주어진 상수값 c의 n 제곱 시간 복잡도 List deque dictionary 정렬 알고리즘