본문 바로가기

프로그래밍

[백준 2667 파이썬] 단지번호붙이기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 # 1. bfs # 2. Python 60 ms dx = [1,0,-1,0] dy = [0,1,0,-1] def bfs(start): queue =[start] length = 1 board[start[0]][start[1]]='2' while queue: point = queue.pop() for i in range(4): nx= dx[i]+point[0] ny= dy[i]+point[1] if 0 더보기
[백준 1260 파이썬] DFS와 BFS 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 # 1. dfs and bfs # 2. python 716 ms p, e, s = map(int, input().split()) # 점, 선, 시작점 tree = [[] for _ in range(p+1)] # tree를 이용해서 저장 for i in range(int(e)): # Get input a, b = map(int, input().split()) tree[a].append(b) tree[b].append(a) # 양방향 for i in range(p+1): # sort tree.. 더보기
[백준 1107 파이썬] 리모컨 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 # 1. 조건에 맞는 리스트 생성 # 2. Python 988ms channel = int(input()) # Target num_broken = int(input()) # 고장난 버튼 수 lst_broken = [] # 고장난 버튼 리스트 if num_broken >0: # 0 더보기
[백준 11659 파이썬] 구간 합 구하기 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # 1. Like Dynamic Programming # 2. Python 296 ms import sys N, M = map(int, sys.stdin.readline().strip().split()) lst = list(map(int, sys.stdin.readline().strip().split())) # LST to SUM_LST # LST : 1 2 3 4 5 # SUM : 0 1 3 6 10 15 sum_lst = [0]*(len(lst)+1) for i in range(1, len(lst)+1): sum_lst[i] = sum_lst[i-1]+lst[i-1] # SUM[b] - SUM[a-1.. 더보기
[백준 2805 파이썬] 나무자르기 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 # 1. Sort # 2. 파이썬 : 시간초과 Pypy : 1504 ms # 3. 위에서 아래로 순서대로 나무 자르기 def solution(): N, M = map(int, input().split()) lst = list(map(int, input().split())) lst.sort() woods = 0 index = len(lst)-1 height = lst[index] while True: # 나무 자르기 woods += len(lst) - 1 - index #길이 확인 if woods >= M: break else: height -=1 while lst[i.. 더보기
[백준 1904 파이썬] 01타일 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 # 1. Fibonacci # 2. Memory를 고려해서 list를 생성 x # 3. Python3 시간초과 PyPy : 7440 ms def solution(): N = int(input()) # 1 --> 1 # 00 11 --> 2 # 001 100 110 --> 3 # 0000 1100 1111 0011 100 --> 5 start = 1 end = 2 next = 0 for i in range(2, N): next = start + end start = end end = next return next print(solution()%15746) 더보기
[Python][Algorithm] Find Index Before Sorted Sorted by key 정렬을 하다 정렬 전의 인덱스를 역으로 찾아야 하는 경우가 생겼습니다. 만일 정렬을 통해 최솟값이 맨 처음으로 왔다면 그 최솟값은 기존 리스트에서 어떤 인덱스에 있었을까요? 리스트를 다루는 유용한 기능인 sorted의 key를 통해서 이에 대한 방법을 설명하겠습니다. 이 방법은 메모리를 추가적으로 사용하기 때문에 최선의 방법이라고 할 수 없을 것 같습니다. # 성적과 그에 해당하는 사람들의 수를 두 개의 리스트에 각각 담았다고 합시다. Score_of_people = ["A0", "C0", "B0", "F", "A+"] Number_of_people = [10, 40, 30, 20, 50] 두 개의 리스트를 합친 리스트를 만듭니다. ALL 이라고 별칭을 하겠습니다. 리스트의 원소.. 더보기
[Python][Algorithm] 조합 Combination 조합은 기본적으로 중복되지 않도록 원하는 만큼을 뽑는 경우입니다. 이 이상으로 조합이 가지는 의미를 파악한다면 이를 코드로 작성하는 것은 쉬운 일입니다. 예제를 통해서 시야를 넓혀봅시다. Sequence = [1,2,3,4] 에서 2개를 뽑는데 1을 뽑고난 뒤에는 2,3,4 세 가지 중에서 하나를 뽑을 수 있습니다. 그림으로 나타내면 아래와 같습니다. 리스트 [1, ?] 를 현재 리스트라고 하면 전체 수열에서 현재 리스트에 1을 담은 상태에서 2,3,4 만 바뀌고 있습니다. 이를 코드로 나타낸다면 2가지 방법이 있는데 1. 인덱스를 이용해서 값을 바꿉니다. 2. 기존 값을 빼고 새로운 값을 넣습니다. 이 중에서 조합을 구하는 데 사용되는 방법은 두 번째 입니다. 이 방법을 일반적으로 적용하면 조합을 구현.. 더보기