본문 바로가기
반응형

프로그래밍54

[BOJ 7576 - 토마토] BFS 알고리즘 (Python) 문제조건 하루가 지나면, 익은 토마토(1)의 인접한 토마토가 익는다(0 -> 1). 인접한 것은 아래, 위, 왼쪽, 오른쪽에 해당한다. 토마토가 모두 익는데 걸리는 최소 일수를 구하라. 핵심개념 익은 토마토(1) 여러 개에서 동시에 탐색을 시작하는 꼴이다. 처음에 익은 토마토들을 모두 queue에 넣고 탐색을 시작하자. 코드 from collections import deque import sys from functools import reduce m, n = map(int, input().split()) tomato = [list(map(int, input().split())) for _ in range(n)] days = [[-1] * m for _ in range(n)] dx = [1, -1, 0,.. 2019. 10. 6.
[BOJ 2667 - 단지번호붙이기] BFS (Python) 문제 조건 위, 아래, 왼쪽, 오른쪽에 집이 있는지 탐색 쭈욱 이어진 곳은 하나의 단지로 세팅 (연결요소 개념) 핵심개념 위, 아래, 왼쪽, 오른쪽 이동을 위한 배열을 만든다. 이동을 하되, 범위를 벗어났는지 아닌지도 체크한다. 모든 정점을 한번씩 시작점으로 하여 탐색한다. 2차원 배열 활용하는 법을 익힌다. (생성, 입력받기, 1차원배열로 만들기 등) 문제풀이 (BFS) 재귀 없이 deque 활용하기 from collections import deque from collections import Counter from functools import reduce # 입력받기 n = int(input()) # 지도 입력받기 (2차원) a = [list(map(int,list(input()))) for _ .. 2019. 10. 3.
[B0J - 14888 연산자 끼워넣기(2)] 브루트포스(순열) python 문제조건 연산자를 N-1개 나열하여 숫자를 계산한다. (순열) 핵심개념 재귀함수와 check 배열을 사용하여 순열을 만들거나 재귀함수와 cnt 배열을 사용한다. (1) 재귀함수와 check배열 사용하는 방법 (시간초과가 나는데 ㅠㅠ) # 입력받기 n = int(input()) num = list(map(int, input().split())) cnt = list(map(int, input().split())) # 연산자 중에서 cal = [0] * cnt[0] + [1] * cnt[1] + [2] * cnt[2] + [3] * cnt[3] # n-1 개를 뽑은 순열 a = [0] * (n - 1) # 연산자 중복 체크용 check = [False] * (len(cal)) # 계산값 ans = [] # n.. 2019. 9. 29.
[BOJ-6603 로또] 브루트포스(조합) (python) 문제조건 k개 수 중에 6개를 고른다. (조합) 핵심개념 파이썬 itertools.combinations 라이브러리를 사용하거나 재귀함수를 이용하거나 next_permutations 함수를 구현하여 사용하는 방법이 있다. 코드 (1) 파이썬 itertools.combinations 라이브러리 사용하는 방법 from itertools import combinations while True: num = list(map(int, input().split())) if num[0] == 0: break #입력받은 수에서 (맨 왼쪽 제외) 6개를 선택하는 경우 for i in combinations(num[1:], 6): print(' '.join(map(str, i))) print() (2) 재귀함수 사용하는 방.. 2019. 9. 29.
[BOJ 15658] 연산자 끼워넣기(2) - python 문제조건 N개의 수가 주어진다. 연산자는 N-1개보다 더 많이 주어질 수 있다. N개의 수의 순서는 변하지 않는다. 연산자의 순서만 바뀐다. 핵심개념 연산자 개수 중에서 N-1개를 뽑아 순열을 구해야 한다. 이를 위해 DFS, 백트래킹을 활용하여 모든 경우의 수를 탐색한다. python 코드 N = int(input()) a = list(map(int,input().split())) cnt = list(map(int,input().split())) max_ans = -1000000000 min_ans = 1000000000 def dfs(idx, ans): global max_ans,min_ans if idx == N: max_ans = max(max_ans, ans) min_ans = min(min_a.. 2019. 9. 24.
[python] set 자료형 활용하여 부분집합 구하기 / 부분집합인지 확인하는 방법 python 부분집합 구하기 부분집합 개념을 쉽게 풀어보자 어떤 덩어리(a)가 다른 덩어리(b) 안에 포함되어 있는가? a={ "apple", "banana"} b={"apple", "banana", "orange"} 어떤 덩어리(a)와 다른 덩어리(b)의 교집합이 어떤 덩어리(a)와 같은가? (a의 사이즈가 더 작을 때) python 부분집합인지 확인하기 어떤 덩어리(a)와 다른 덩어리ㅎ(b)의 교집합이 어떤 덩어리(a)와 같은가? 관점으로 접근해보겠습니다. def check (a,b): # 교집합 개념을 사용하기 위해 리스트인 a, b를 set 자료형으로 변경한다. s1=set(a) s2=set(b) if s1 ==s1.intersection(s2) : print("a는 b의 부분집합입니다!") el.. 2019. 9. 6.
반응형