Algorithm 211

[Python] 1208. Flatten

import sys sys.stdin = open('input.txt') # min max index 함수 쓴 버전 # 10개의 테스트 케이스 for idx in range(1, 11): # 덤프 횟수 n = int(input()) # 각 상자의 높이 값 boxes_height = list(map(int, input().split())) # 평탄화 작업 for i in range(n): # 가장 높은 상자, 가장 낮은 상자 찾기 h_idx = boxes_height.index(max(boxes_height)) l_idx = boxes_height.index(min(boxes_height)) # 박스 옮기기 boxes_height[h_idx] -= 1 boxes_height[l_idx] += 1 # fin..

[Python] 4831. 전기버스

충전기가 있는 곳에서 다음 충전기까지의 거리와 연료랑을 검토하는 코드 # 노선 T t = int(input()) # 노선 t만큼 반복 for idx in range(1, t+1): # 정류장 수 k, 종점 n, 충전기 설치된 곳의 수 m k, n, m = map(int, input().split()) # 충전기가 설치된 곳 charger = list(map(int, input().split())) now = 0 # 현재 위치 battery = k # 배터리 상태 next_c = 1 # 다음 충전기 설치 된 곳의 idx answer = 0 # 최소 충전 횟수 # 목표지점 전까지 반복 # 목표지점에서는 배터리 0이어도 상관 X이므로 while now < n-1: now += 1 # 위치 이동 battery ..

[Python] 4835. 구간합

import sys sys.stdin = open('input.txt') # tc 수 tc = int(input()) # tc 수만큼 반복 for idx in range(1, tc+1): # 정수의 개수 n, 구간의 개수 M: n, m = map(int, input().split()) # n개의 정수 ai numbers = list(map(int, input().split())) # 최소 구간, 최대 구간 초기화 min_ai = 10000000000000000000000000 max_ai = 0 # 구간을 구할 것이므로 구간의 개수만큼 뺀 n-m+1 만큼 반복. for i in range(n-m+1): # section = sum(numbers[i:i + m]) section = 0 for j in ra..

[Python] 4834. 숫자 카드

# tc 수 tc = int(input()) # tc 수만큼 반복 for i in range(1, tc+1): # 카드 장수 n n = int(input()) # n개의 숫자 cards (0은 제거한다) cards = input() # 카드 개수가 들어갈 리스트 cards_count = [0 for i in range(10)] # 카드가 담긴 cards를 돌며 카드 개수 세기 for card in cards: # 장수가 같은 경우에는 큰 숫자를 출력해야하니 # 큰 카드를 앞쪽부터 저장한다. cards_count[9-int(card)] += 1 # 가장 많은 카드 개수 max_card = max(cards_count) # index 함수를 활용하여 가장 많은 카드 개수를 가진 인덱스를 출력한다. print..

[Python] 4828. min max

내장함수(min, max 함수) 쓰지않고 풀어보기 # TC 수 tc = int(input()) # tc 수만큼 반복 for idx in range(1, tc+1): # 양수의 개수 N n = int(input()) # N개의 양수 numbers numbers = list(map(int, input().split())) min_num = max_num = numbers[0] for i in range(n): # min 구하기 if min_num > numbers[i]: min_num = numbers[i] # max 구하기 if max_num < numbers[i]: max_num = numbers[i] print('#{} {}'.format(idx, max_num-min_num))

DFS / BFS

DFS(Depth-First Search) : 깊이 우선 탐색 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘. 스택 자료구조 혹은 재귀 함수를 이용한다. ✔︎ 동작과정 탐색 시작 노드를 스택에 삽입하고 방문 처리한다. 스택의 최상단 노드에 방문하지 않은 인접한 노드가 하나라도 있으면 그 노드를 스택에 넣고 방문처리를 한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다. 더 이상 2번의 과정을 수행할 수 없을 때까지 수행한다. ✔︎ 깊이 제한 : 탐색 과정이 시작 노드에서 한없이 깊이 진행되는 것을 막기 위함이다. 깊이 제한에 도달할 때까지 목표 노드가 발견되지 않으면 최근에 첨가된 노드의 부모노드로 되돌아와서, 부모노드 이전과는 다른 동작자를 적용하여 새로운 자식노드를 생성한다...

Algorithm/개념 2021.06.20

에라토스테네스의 체(Eratosthenes' sieve )

에라토스테네스의 체(Eratosthenes' sieve ) 그리스의 수학자이자 지리학자인 에라토스테네스가 고안한 소수를 찾는 방법이다. 에라토스테네스의 체 알고리즘 1. 1부터 n까지의 자연수를 전부 나열한다. 2. 소수도, 합성수도 아닌 1을 지운다. 3. 남아 있는 자연수 중 가장 작은 수인 2 의 배수들을 모두 지운다. 4. 남아 있는 자연수 중 가장 작은 수인 3의 배수들을 모두 지운다. 5. 남아 있는 자연수 중 가장 작은 수는 소수다. 이 수의 배수들을 모두 지운다. 6. 남은 자연수 중 가장 작은 수가 n의 제곱근을 넘을 때까지 과정 5를 반복하면, 남아 있는 수가 모두 소수다. 코드로 표현하기(Python) number = [False, False] + [True] * n answer = ..

Algorithm/개념 2021.06.18

[Python] 소수 찾기

def solution(n): number = [False, False] + [True] * n answer = [] for i in range(2, n+1) : if number[i] : answer.append(i) for j in range(2*i, n+1, i) : number[j] = False return len(answer) 풀이 ★ 에라스토테네스의 체를 활용해야 효율성테스트를 통과할 수 있다. ★ 2021.06.18 - [Algorithm/개념] - 에라토스테네스의 체(Eratosthenes' sieve ) 에라토스테네스의 체(Eratosthenes' sieve ) 에라토스테네스의 체(Eratosthenes' sieve ) 그리스의 수학자이자 지리학자인 에라토스테네스가 고안한 소수를 찾는 ..