백준
[백준 파이썬] # 2667 단지 번호 붙이기 (DFS 풀이)
Silver I # 2667 단지 번호 붙이기 링크 : https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 풀이 (DFS) # n의 개수, graph, visited 정의 n = int(input()) graph = [[0]*n for _ in range(n)] visited = [[False]*n for _ in range(n)] # 입력값을 graph에 기입 for i in range(n): line = input() for j, b in enu..
[백준 파이썬] # 1260 DFS와 BFS
Silver II # 1260 DFS와 BFS 링크 : https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 풀이 from collections import deque n, m, v = map(int, input().split()) graph = [[] for _ in range(n+1)] for i in range(m): s, e = map(int, input().split()) graph[s].append(e..
[백준 파이썬] # 1436 영화감독 숌
Silver V # 1436 영화감독 숌 브루트 포스 링크 : https://www.acmicpc.net/problem/1436 1436번: 영화감독 숌 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타 www.acmicpc.net 풀이 N = int(input()) li = [] num = 1 while len(li) < N: if '666' in str(num): li.append(num) num += 1 print(li[N-1]) while문 풀이 경험이 드문거리다 보니 적용 방식에 대해 미숙했다 while문을 적용할 때 조건을 어떻게 설정할지가 중요하다 ..
[백준 파이썬] # 7568 덩치
Silver V # 7568 덩치 브루트 포스 링크 : https://www.acmicpc.net/problem/7568 7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 풀이 N = int(input()) li = [] for i in range(N): w, h = map(int, input().split()) li.append([w, h]) for i in range(N): rank = 1 for j in range(N): if (li[i][0] < li[j][0]) and (li[i][1] <..
[백준 파이썬] # 13305 주유소
Siver IV # 13305 주유소 그리디 알고리즘 링크 : https://www.acmicpc.net/problem/13305 13305번: 주유소 표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1 www.acmicpc.net 풀이 N = int(input()) D = list(map(int, input().split())) # Distance P = list(map(int, input().split())) # Price C = 0 # Cost M = 1000000001 # Minimum Distance C += D[0]*P[0] # D, P의..
[백준 파이썬] # 2231 분해합
Bronze II # 2231 분해합 브루트 포스 링크 : https://www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 풀이 N = int(input()) li = [] # 출력값이 N보다는 작은 값이라는 가정하에 모든 경우의 수 확인 for i in range(N): s = 0 # for문이 돌 때마다 s를 갱신해야 함 s += i for j in str(i): s += int(j) if s == N: li.append(i) ..
[백준 파이썬] # 2798 블랙잭
Bronze II # 2798 블랙잭 브루트 포스 링크 : https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 풀이 N, M = map(int, input().split()) cards = list(map(int, input().split())) sum_list = [] for i in range(N): for j in range(i+1, N): for k in range(j+1, N): if cards[i]+car..
[백준 파이썬] # 1541 잃어버린 괄호
Silver II # 1541 잃어버린 괄호 그리디 알고리즘 링크 : https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 풀이 a = input().split('-') # '-' 기준으로 분리 li = [] for i in a: cnt = 0 i = i.split('+') # 각 i를 '+' 기준으로 분리 for j in i: cnt += int(j) # 계산을 위해 숫자형으로 바꿔야 함 li.append(cnt) n = li[0] for i..
[백준 파이썬] # 1931 회의실 배정
Siver II # 1931 회의실 배정 그리디 알고리즘 유형 링크 : https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 풀이 N = int(input()) time = [] for i in range(N): start, end = map(int, input().split()) time.append([start, end]) time = sorted(time, key = lambda a : a[0]) # start 기준으로 오름차순 정렬 time = sorted(time, key = lambda a : a[1]) # end 기준으로 오름차순 정렬 ## 오름차순 정..
[백준 파이썬] # 11047 동전 0
Silver II # 11047 동전 0 https://www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 풀이 N, K = map(int, input().split()) count = 0 coin = [] for i in range(N): A = int(input()) coin.append(A) coin = sorted(coin, reverse=True) for i in coin: count +=..