알고리즘 78

[백준] 2108 통계학 파이썬 풀이 (정렬)

백준 문제풀이 입력받은 숫자들을 리스트에 저장하고 크기 순서대로 정렬을 해주었다. (중앙값을 구하기 위해) 산술 평균: sum을 len으로 나누고 반올림했다. 중앙값: len의 나누기2의 위치에 있는 값을 출력한다. 최빈값: Counter사용 Counter(num_list).most_common() 메소드는 num_list에서 가장 많이 들어있는 순서대로 dict형태로 출력한다. 예를 들어 num_list가 [1,1,1,2,2,3]이면 { 1:3 , 2:2, 3:1} 이렇게 출력한다. 여기서는 가장 많이 들어있는 것이 두개넘는지만 보면 되기때문에 2개까지 확인한다. 첫번째 나온 빈도와 두번째 나온 빈도가 같으면 최빈값 중에서 두번째로 작은 값( mode[1][0])을 출력한다 범위 : 마지막 숫자와 맨 ..

[백준] 1149 RGB거리 파이썬 풀이(동적 계획법)

백준 문제 n번째 집은 그 앞의 집과 색이 같으면 안된다. 그 뒤에 집이랑도 색이 같으면 안된다. 풀이 집의 개수가 주어지고 집마다 빨강, 초록, 파랑으로 칠할때의 값이 주어지는 것을 리스트로 만든다. 1번째 집이 빨간색으로 칠하는 비용은 p[0][0]이고 2번째 집이 파랑색으로 칠하는 비용은 p[1][2] 이런식으로 집이 한개만 있을때는 p[0][0] p[0][1] p[0][2] 중에서 가장 작은 것을 구하면 된다. 집이 두개 이상일때는 지금 집이 빨강일때 -> 전 집을 파랑으로 칠한것 or 초록으로 칠한 것 중에서 비용을 더한 것이 가장 작을때를 p[i][0]에 저장한다 지금 집이 초록일때, 파랑일때도 마찬가지로 계산하여 p[i][0] p[i][1] p[i][2] 에 저장하고 그 중에서 가장 작은 값..

[백준] 9461 파도반 수열 파이썬 풀이 (동적 계획법)

백준 문제 파도반 수열은 1 1 1 2 2 3 4 5 7 9 12 ... 이다 4번째 수인 2부터 보면 2번째 수와 1번째 수를 더한 값이다. 6번째 수인 3은 4번째 수인 2와 3번째 수인 1을 더한 값이다. n번째 수는 n-2번째 수와 n-3번째 수를 더 한 값이다. 풀이 N은 100까지밖에 안되므로 미리 구해놓자 dp 배열을 100인덱스까지 만들어놓고 1 2 3 번째는 1로 초기화. 4번째 부터 위에서 말한 규칙을 적용하여 dp배열을 미리 만들어 놓음 코드 num = int(input()) dp = [0 for i in range(101)] dp[1] = 1 dp[2] = 1 dp[3] = 1 for i in range(4,101): dp[i] = dp[i-2] + dp[i-3] for _ in r..

[백준] 11866 요세푸스 문제 0 파이썬 풀이 (큐, 덱)

코드 from collections import deque n, k = map(int, input().split()) stack = deque([i for i in range(1, n+1)]) print("") 풀이 원래 이해가 안됐던 점은 만약에 7 7 이 입력되면 7번째 사람이 죽고 6명 남으면 어떡하지? 라고 생각했는데 그러면 계속 돌면서 7번째 사람을 죽이는 것이다 예를 들어 1 2 3 4 5 6 사람이 있으면 여기서 7번째는 1번이다 stack에 1부터 n번호까지 사람을 넣고 k번째 사람이 맨 왼쪽에 올때까지 stack에 맨 앞에 원소를 꺼내서 맨 뒤에 넣는다 7명이고 3번째 사람을 죽인다고 치면 1 2 3 4 5 6 7 에서 2 3 4 5 6 7 1 을 만들고 3 4 5 6 7 1 2 를 만들..

[백준] 2667 단지 번호 붙이기 파이썬 풀이 (DFS, BFS)

코드 import sys dx=[-1,0,1,0] dy=[0,1,0,-1] n=int(sys.stdin.readline()) a=[list(sys.stdin.readline()) for _ in range(n)] print(a) cnt=0 apt=[] def dfs(x,y): global cnt a[x][y] = '0' #방문한 곳은 0으로 바꾼다. cnt+=1 for i in range(4): nx = x + dx[i] #설명 ny = y + dy[i] if nx = n or ny =n: continue if a[nx][ny] == '1': dfs(nx,ny) for i in range(n): for j in range(n): if a[i][j] == '1': c..

[백준] 1260 DFS와 BFS 파이썬 풀이

2021.06.21 - [알고리즘/이론] - [알고리즘] DFS 와 BFS 깊이 우선 탐색, 너비 우선 탐색 [알고리즘] DFS 와 BFS 깊이 우선 탐색, 너비 우선 탐색 DFS/ BFS 자료의 검색, 트리나 그래프를 탐색하는 방법 한 노드를 시작으로 인접한 다른 노드를 재귀적으로 탐색해가고 끝까지 탐색하면 다시 위로 올라와서 다음을 탐색하여 검색하는 것. DFS (깊 sso-feeling.tistory.com 코드 #N : 정점의 개수/ M: 간선의 개수/ V: 시작할 정점 N,M,V=map(int,input().split()) matrix=[[0]*(N+1) for i in range(N+1)] for i in range(M): a,b = map(int,input().split()) matrix[a..

[알고리즘] DFS 와 BFS 깊이 우선 탐색, 너비 우선 탐색

DFS/ BFS 자료의 검색, 트리나 그래프를 탐색하는 방법 한 노드를 시작으로 인접한 다른 노드를 재귀적으로 탐색해가고 끝까지 탐색하면 다시 위로 올라와서 다음을 탐색하여 검색하는 것. DFS (깊이 우선 탐색) 노드를 방문하고 깊이 우선으로 인접한 노드를 방문한다 끝까지 방문하면 다시 돌아와서 다시 끝까지 방문한다. 이렇게 그래프가 있을 때 깊이 우선은 숫자 순서대로 탐색한다 1 2 3 4 까지 갔다가 다시 1로 올라와서 5 6 7 을 방문하고 다시 5로 올라와서 8을 방문하고 다시 1로 올라와서 9 10을 방문한다. 재귀함수로 이를 표현한다 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 # 위의 그래프를 예..

알고리즘/이론 2021.06.21

[백준] 1021 회전하는 큐 파이썬 풀이 (큐)

코드 from collections import deque def move_left(queue): first = queue.popleft() queue.append(first) def move_right(queue): last = queue.pop() queue.appendleft(last) def find_index(queue, num): index = 0 for index in range(len(queue)): if queue[index] == num: break return index # -------------------------------------------- N,M = map(int, input().split()) queue = deque() find_number = [] for i in ..