분류 전체보기 665

[백준] 2589 보물섬

https://acmicpc.net/problem/2589 2589번: 보물섬 보물섬 지도를 발견한 후크 선장은 보물을 찾아나섰다. 보물섬 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 각 칸은 육지(L)나 바다(W)로 표시되어 있다. 이 지도에서 www.acmicpc.net from collections import deque n, m = map(int, input().split()) _map = [ input() for i in range(n)] # n, m = 5, 7 # _map = ['WLLWWWL', 'LLLWLLL', 'LWLWLWW', 'LWLWLLL', 'WLLWLWW'] def bfs(x, y): q = deque() visited = [[0] * m for _..

STUDY/Algorithm 2021.03.08

[백준] 2468 안전영역

www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 주어지는 것은 지역의 높이 정보이고, 내리는 비의 양은 6이다. 즉 6 이하의 높이를 가지고 있는 곳은 물에 잠기게 된다. (입력이 N밖에 주어지지 않았으므로 혹시 다른 문제에서 비의 양이 주어지면 값만 바꿔주면 된다.) 구해야하는 건 안전한 영역의 개수이다. dfs나 bfs를 사용하면 쉽게 구할수 있을 것이다. DFS나 BFS를 사용해서 구할수 있는 방법은 두가지 인데, 첫 번째는 물에 잠기는 영역을 만들고 안전영역..

STUDY/Algorithm 2021.03.06

[백준] 1759 암호만들기

www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net L, C = map(int, input().split()) char = input().split() char.sort() def comb(index=0, arr=[], limit=L): if index == limit: vowel = {'a','e','i','o','u'} vow, con = 0, 0 for i in range(limit): if arr[i] in vowel: vow += 1 else: con += ..

STUDY/Algorithm 2021.03.05

[백준] 3980 선발명단

www.acmicpc.net/problem/3980 3980번: 선발 명단 각각의 테스트 케이스에 대해서, 모든 포지션의 선수를 채웠을 때, 능력치의 합의 최댓값을 출력한다. 항상 하나 이상의 올바른 라인업을 만들 수 있다. www.acmicpc.net for tc in range(int(input())): player = [0] * 11 for i in range(11): player[i] = list(map(int,input().split())) visit = [0] * 11 max_val = 0 def comb(index=0, total=0): if index == 11: global max_val if max_val < total: max_val = total else: for i in range..

STUDY/Algorithm 2021.03.05

[백준] 6603 로또

www.acmicpc.net/problem/6603 6603번: 로또 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로 www.acmicpc.net 로또 1등 한번만 받아보고싶습니다..... while True: k, *S = map(int, input().split()) if k == 0: break visited = [0] * k def lotto(index=0, arr=[]): if index == 6: print(*arr) return else: for i in range(index, k): if visited[i] == 0: if arr..

STUDY/Algorithm 2021.03.04

[백준] 2583 영역구하기

www.acmicpc.net/problem/2583 2583번: 영역 구하기 첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오 www.acmicpc.net from collections import deque def bfs(row, col): q = deque() dr = [-1, 1, 0, 0] dc = [0, 0, -1, 1] q.append((row, col)) matrix[row][col] = 1 while q: nr, nc = q.popleft() for i in range(4): if 0

STUDY/Algorithm 2021.03.04

[백준] N과 M (시리즈)

www.acmicpc.net/workbook/view/2052 문제집: N과 M (시리즈) www.acmicpc.net 백트래킹을 연습하기 위해 4번까지 풀었다. 15649 n, m = map(int, input().split()) visited = [0] * (n + 1) def asdf(index=0, arr=[], key=m, end=n): if index == key: print(' '.join(map(str, arr))) else: for i in range(1,end+1): if visited[i] == 0: visited[i] = 1 asdf(index + 1, arr + [i]) visited[i] = 0 asdf() 15650 n, m = map(int, input().split()) d..

STUDY/Algorithm 2021.03.04

[백준] 2798 블랙잭

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())) max_val = 0 def blackjack(index=0, visit_index=-1, arr=[], length=n, key=m): if index == 3: if sum(arr) > key: return global max_val if max_..

STUDY/Algorithm 2021.03.04

[백준] 2309 일곱 난쟁이

https://acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net dwarf = [int(input()) for _ in range(9)] visited = [0] * 9 real_dwarf = [] def backtrack(index, total, vis_idx, arr, visit): if index == 7 and total == 100: real_dwarf.append([dwarf[i] for i in range(9) if visit[i]]) return elif ind..

STUDY/Algorithm 2021.03.04

[백준] 7569 토마토

www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 이번엔 3차원배열이다. 2차원 배열에서 z축이 하나 더 생겼지만, 6개만 확인하면 되는 문제이므로 난이도가 확 올라가진 않는다. 여러번 시도했으나 지난 토마토 문제와 같이 시간초과가 떴다. 그래서 pypy로 확인해 보니 정답. 알고리즘엔 문제가 없는걸 확인했다. 다음은 pypy에서 돌아간 코드이다 from collections import deque dz = [0, 0, 0, 0, -1,..

STUDY/Algorithm 2021.03.02