백준 49

[백준 알고리즘] 3980. 선발명단 - 파이썬

주어진 배열이 2차배열이라 check도 2차배열로 사용하려 했는데, idx와 check의 r행이 같이 가므로 check의 인덱스를 idx로 바꿀 수 있어 더 간편하게 코드를 짤 수 있었다. def get_max(idx, cur_sum): global max_sum if idx == 11: if cur_sum > max_sum: max_sum = cur_sum return for j in range(11): if check[j]: continue if sportsman[idx][j]: check[j] = 1 get_max(idx+1, cur_sum+sportsman[idx][j]) check[j] = 0 T = int(input()) for _ in range(T): sportsman = [] check ..

[백준 알고리즘] 6603.로또 - 조합

6개의 로또 숫자를 뽑는 것이므로 조합이고, 중복되는 값이 있으면 안된다. 그래서 start로 범위를 이전보다 다음에서 시작하게 만들어 풀었다. def lotto(idx, start): if idx == 6: print(" ".join(select)) return for i in range(start, k): select[idx] = S[i] lotto(idx+1, i+1) select = [0] * 6 while True: nums = list(input().split()) k, S = int(nums[0]), nums[1:] if k == 0: break lotto(0, 0) print() 풀다보니 이제는 자동적으로 if idx == M : 이런식으로 코드를 작성하게 된다.. 조합과 순열은 결국 많이..

[백준 알고리즘] 15652. N과 M (4) - 중복조합

중복을 허용하면서 조합으로 풀어야한다. 원래의 조합은 중복을 허용하지 않기에 뽑은 숫자 +1 부터 시작하는데 중복조합은 뽑은 숫자 부터 시작해서 중복하도록 만들어 주었다. #### 중복조합 N, M = map(int, input().split()) choice = [0] * M def comb_with_rep(idx, start): if idx == M: print(" ".join(map(str, choice))) return for i in range(start, N): choice[idx] = i+1 comb_with_rep(idx+1, i) comb_with_rep(0, 0)

[백준 알고리즘] 15649. N과 M (1) - 순열

간단한 순열을 푸는 문제다. 왠지 순열문제는 기분이 나쁘다... ㅋㅋㅋㅋㅋㅋㅋ 중복되지 않는 순열이기에 visited로 중복검사가 필요하다. 만약 중복 순열이라면 visited를 빼면 된다. N, M = map(int, input().split()) num = [] visited = [0 for _ in range(N)] def perm(idx): if idx == M: print(" ".join(map(str, num))) return for i in range(N): if visited[i] == 0: num.append(i+1) visited[i] = 1 perm(idx+1) num.pop() visited[i] = 0 perm(0) 이것보다 더 빠르고 간단하게 순열을 구하려면 itertools에서..

[백준 알고리즘] 10026. 적록색약 - 파이썬, DFS

🎈 처음에 sys.sys.setrecursionlimit(10000000) 설정해주지 않아 런타임에러가 걸렸다. 🎈 예제나 다른 복잡한 반례를 넣어봤을 때는 다 맞았는데, 제출하자마자 바로 틀렸다고 해서 처음에 조금 헤맸다. - > 원인을 찾아보니 for 문에서 iterator 반환 변수와 변수를 혼용해서 썼다.. 이런 기초적인 것들(?) 혹은 오타 때문에 생기는 오류들 때문에 때로는 문제푸는데 필요없이 오래걸리곤 한다... ㅠ 다신 까먹지 말자...ㅎㅎ 혹시 필요한 분들을 위해.. 제 오류를 찾은 반례도 함께 남겨 놓겠습니다.(제가 반례찾는다고 엄청 헤맸거든요..ㅠ) 2 BR GB 3 2 💻 딕셔너리를 사용해서 적록색약이 보는 R, G의 값은 동일하게, 일반 사람이 보는 R, G의 값을 다르게 설정했다..

[백준 알고리즘] 1012 유기농배추 _ 파이썬, dfs

https://acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 1) DFS를 사용해서 양배추 밭을 한번씩 돌아다니면서 배추가 있는지 판별했고 있는 경우 해당 배추와 인접해 있는 배추를 다 0으로 만들어 다시 방문하지 못하도록 했다. # M은 배추밭의 가로, N은 세로, k는 배추가 심어져 있는 위치의 개수 # 델타 이동을 통해서 인접한 배추밭들 세기 import sys delta = [(0, 1), (0, -1), (1, 0), (-1, 0)] for _ in range(int..

[백준 알고리즘] 1244. 스위치 켜고 끄기 - 파이썬

1244. 스위치 켜고 끄기 문제를 풀기 전에 먼저 작게 나눠서 생각하려 노력을 많이 하는데, 그렇게 하는 이유는 1) 작게 생각하는 과정 없이 무작정 들이댔다가 오히려 더 돌아감. 2) 작게 생각하면 문제 접근하기도 용이함. 결국 2개다 문제를 조금 더 쉽게 접근할 수 있다는 같은 이유인 것 같다. 이 문제도 당연히 남자, 여자를 나누어서 풀었다. 남자인 경우, 배수 일때 스위치를 바꿔주어야 하므로 range를 이용해 간격을 두어 배수만 찾아다니도록 했다. 여자인 경우, 전체길이의//2 만큼 탐색하도록 했다.(양쪽을 탐색하므로) 그리고 스위치의 상태를 바꾸는 것은 남자나 여자나 공통적으로 필요함으로 따로 함수를 두어 사용해 코드를 간결하게 하도록 했다. def change(num): if switch[..