알고리즘 123

[프로그래머스] 2020 KAKAO BLIND RECRUITMENT 문자열 압축 by 파이썬(Python)

https://school.programmers.co.kr/learn/courses/30/lessons/60057 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr LV2 문제이해 문자를 일정 단위로 압축할 수 있다. 최대로 압축하는 한 경우의 문자열 길이를 찾아내기. 풀이법 파이썬의 리스트 슬라이싱을 활용해 문자열을 잘라내 압축 문자열을 만든다. 현재 문자열과 이전 문자열이 같다면 압축 성공 다른 경우에 한번도 압축이 되지않는다면 그대로 표시, 압축이 두번이상 되었다면 압축해서 표시해준다. arr에 현재 i만큼 자르면서 만든 압축 문자열의 길이를 저장한다...

[프로그래머스] 연속된 부분 수열의 합 by 파이썬 (python) Lv2

https://school.programmers.co.kr/learn/courses/30/lessons/178870 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr lv2 문제 이해 붙어 있는 수들의 합으로 k를 만들어야 한다. 답이 여러개인 경우 길이가 가장 짧은 수열을 찾아야 한다. 길이가 가장 짧은 수열이 여러개인 경우 앞쪽에 나오는 수열을 찾는다. 접근법 투포인터 알고리즘을 사용하여 합이 k 인 부분 수열을 찾는다. right가 오른쪽 끝까지 갈때 까지 반복문을 돌린다. 1. 합이 k와 같은 경우 - 해당 부분의 수열의 길이를 계산하고 가장 짧은 길..

[프로그래머스] 호텔 대실 LV2 by 파이썬 (python)

https://school.programmers.co.kr/learn/courses/30/lessons/155651 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 이해 1. 최소한의 객실만을 사용하여 예약손님 받기 2. 퇴실 기준 10분이후에 다음 손님 사용 가능 3. 00:00 ~ 23:59 접근법 1. heapq를 사용하여 객실의 끝나는 시간을 저장하기 2. 가장 빨리 끝나는 시간과 다음 이용자의 시작 시간을 비교 3. 다음 이용자의 시작시간이 더 느리다면 같은 객실을 이용 가능한 것 => heappop으로 앞의 시간 제거 4. 마지막에 heap..

프로그래머스[2021 KAKAO BLIND RECRUITMENT] 메뉴 리뉴얼 by 파이썬 (python)

https://school.programmers.co.kr/learn/courses/30/lessons/72411 난이도 LV.2 문제 이해 1. 코스요리를 구성하는 단품메뉴 갯수가 담긴 course로 코스요리를 분류하기. 2. 최소 2명 이상의 손님으로부터 주문된 단품 메뉴 조합에 대해서만 코스요리 메뉴 후보에 포함. 3. 각 갯수에 따른 코스요리별 가장 많이 주문된 메뉴구성이 해당 코스 요리로 선정된다. ㄴ 만약 가장 많이 주문된 메뉴구성이 여러개 ( 횟수 동일) 하다면 모두 코스요리 선정 접근법 1. 파이썬의 itertools를 이용해 조합(combinations)을 사용하여 주문된 단품메뉴로 만들 수 있는 모든 코스 요리 만들기. 2. 파이썬의 Counter을 사용해 중복된 데이터가 저장된 배열이..

[쉽게 배우는 운영체제] 제 3장 프로세스와 스레드 연습문제 풀이 정답 (심화문제)

연습문제 1. 프로그램이 프로세스가 되려면 운영체제로부터 무엇을 받아야 하는가? - 프로세스 제어블록 (PCB) 2. 프로세스의 상태 중 CPU를 할당받기 위해 기다리는 상태는 무엇인가? - 준비상태 3. 프로세스의 상태 중 입출력 작업을 하기위해 이동하는 상태는 무엇인가? - 대기상태 4. CPU 스케줄러가 준비 상태에 있는 프로세스 중 하나를 골라 CPU를 할당하는 작업을 무엇이라고 하는가? - 디스패치 5. 유닉스에서 ctrl + r 키를 눌러 프로세스가 중단되면 프로세스는 어떤 상태로 바뀌는가? - 휴식상태 6. 실행 상태에서 하나의 프로세스가 나가고 새로운 프로세스가 들어오는 상황을 무엇이라고 하는가? - 문맥교환 7. 실행중인 프로세스로부터 새로운 프로세스를 복사하는 시스템 호출은 무엇인가? ..

[baekjoon] 백준 9465번 : 스티커 (by python 파이썬)

https://www.acmicpc.net/problem/9465 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net 정답 code #스티커 import sys input = sys.stdin.readline t = int(input()) for _ in range(t): case = [] n = int(input()) for i in range(2): case.append(list(map(int,input().split()))) for j in range(1,n): if j == 1: case[0][..

[baekjoon] 백준 5639번 : 이진 검색 트리 (by python 파이썬) 재귀

https://www.acmicpc.net/problem/5639 5639번: 이진 검색 트리 트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다 www.acmicpc.net 정답 code # 이진 검색 트리 import sys input = sys.stdin.readline sys.setrecursionlimit(10**6) tree = [] while True: try: num = int(input()) tree.append(num) except: break def postorder(start,end): if start > end: return mid ..

[baekjoon] 백준 2638번 : 치즈 (by python 파이썬) bfs

https://www.acmicpc.net/problem/2638 2638번: 치즈 첫째 줄에는 모눈종이의 크기를 나타내는 두 개의 정수 N, M (5 ≤ N, M ≤ 100)이 주어진다. 그 다음 N개의 줄에는 모눈종이 위의 격자에 치즈가 있는 부분은 1로 표시되고, 치즈가 없는 부분은 0으로 www.acmicpc.net 정답 code # 치즈 import sys input = sys.stdin.readline from collections import deque dx = [-1,1,0,0] dy = [0,0,-1,1] # bfs로 외부 공기를 탐색하며 외부공기와 접촉시마다 +1 카운트해줌 def bfs(): queue = deque() #맨 가장자리에는 치즈가 안놓이는 외부공기 queue.append..

[baekjoon] 백준 2407번 : 조합 (by python 파이썬) 수학 조합

https://www.acmicpc.net/problem/2407 2407번: 조합 n과 m이 주어진다. (5 ≤ n ≤ 100, 5 ≤ m ≤ 100, m ≤ n) www.acmicpc.net 정답 code # 조합 import math # nCm = n! / (n-m)! *m! n,m = map(int,input().split()) top = math.factorial(n) bottom = (math.factorial(n-m)) * (math.factorial(m)) print(top//bottom) solution math모듈에 factorial 함수를 이용하여 쉽게 구현 하였다. nCm = n! / (n-m)! * m!를 위아래로 나눠 계산후 출력해주면 된다.

[baekjoon] 백준 2263번 : 트리의 순회 (by python 파이썬) 재귀

https://www.acmicpc.net/problem/2263 2263번: 트리의 순회 첫째 줄에 n(1 ≤ n ≤ 100,000)이 주어진다. 다음 줄에는 인오더를 나타내는 n개의 자연수가 주어지고, 그 다음 줄에는 같은 식으로 포스트오더가 주어진다. www.acmicpc.net 정답 code #트리의 순회 import sys input = sys.stdin.readline sys.setrecursionlimit(10**5) n = int(input()) inorder = list(map(int,input().split())) postorder = list(map(int,input().split())) #후위순회에서 최상위노드를 찾은후 중위순회에서 찾기위해 인덱스번호 부여 nodenum = [0] ..