practivceAlgorithm/백준 379

[백준][Python] 2876 그래픽스 퀴즈

a==b인경우 생각못해서 좀 걸렸다. import sys input = sys.stdin.readline N = int(input()) arr = [list(map(int, input().split())) for _ in range(N)] max_grade = {i:0 for i in range(1,6)} seq_grade = {i:0 for i in range(1,6)} for i in range(2): seq_grade[arr[0][i]] = 1 max_grade[arr[0][i]] = 1 for i in range(1,N): if arr[i][0] == arr[i][1]: arr[i].pop() for num in arr[i]: seq_grade[num] += 1 if num not in arr[i..

[백준][Python] 4134 다음 소수

체를 m까지만 돌려주고 그 m까지의 소수만을 가지고 n의 소수 판별을 하면 된다. 소수정리에따라 n다음의 소수는 n+ln(n)이전에 나와야 하니 n+ln(n)까지만 검사를 해주면 된다. import sys input = sys.stdin.readline from math import log2 def make_ast_sieve(): MAX = int(4e9) m = int(MAX**0.5)+1 sieve = [False,False] + [True] * m for i in range(2,m): if sieve[i]: for j in range(i+i,m,i): sieve[j] = False return [num for num in range(2,m) if sieve[num]] def prime_check(n..

[백준][Python] 16934 게임닉네임 : Trie

Trie insert, search만 조금 변형하면 된다. import sys input = sys.stdin.readline from collections import defaultdict class Node: def __init__(self): self.word = False self.children = {} class Trie: def __init__(self): self.root = Node() def insert(self, word): node = self.root for char in word: if char not in node.children: node.children[char] = Node() node = node.children[char] same_nick[word] += 1 node...

[백준][Python] 3673 나눌 수 있는 부분 수열

부분합이 d 이하인 것들의 갯수를 세어 각 부분합이 나온 갯수에서 2개를 뽑는 조합의 수를 모두 더해준다. import sys input = sys.stdin.readline for _ in range(int(input())): d, n = map(int, input().split()) arr = list(map(lambda x: int(x)%d, input().split())) visited = [1] + [0] * 1000000 sum_n = 0 for num in arr: sum_n = (sum_n + num) % d visited[sum_n] += 1 result = 0 for i in range(d): result += visited[i]*(visited[i]-1)//2 print(result)

[백준][Python] 3613 Java vs C++

리팩터링은 귀찮아서 못하겠슴둥.. 1. 맨앞 대문자 2. 대문자와 _ 가 같이 나오는 경우 import sys input = sys.stdin.readline var = input().rstrip() if var[0]=='_': print('Error!') exit() var_name = var.split('_') if len(var_name) > 1: answer = '' for char in var_name[0]: if char.isupper(): print('Error!') exit() answer += char for var in var_name[1:]: if var: if var[0].isupper(): print('Error!') exit() answer += var[0].upper() for..

[백준][Python] 15900 나무탈출

리프노드부터 거리 합이 홀수면 승 짝수면 패. 근데 이거 좀 너무한게 변수명을 다 저렇게 줄여야 통과됨.. 아니면 시간초과 import sys input = sys.stdin.readline from collections import deque,defaultdict # 왜? BFS로 안풀림? def BFS(start): q = deque() q.append([start,0]) vi[start] = True a = 0 while q: c_n,d = q.popleft() for n_n in g[c_n]: if not vi[n_n]: vi[n_n]=True q.append([n_n,d+1]) if len(g[n_n])==1: a += d+1 return a N = int(input()) g = defaultd..

[백준][Python] 14391 종이조각 : 비트마스킹 전수조사

배열에서 경우의 수로 합이나 최소 최대 구하기 나올때마다 BFS, DFS 보다 비트마스킹하면 어떨까 상상만 해봤는데 실제로 접한 첫문제. 경우의 수 브루트포스 문제를 비트마스킹으로 어떻게 순회할 것인가 잘 나타낸 문제 같다. 코드 전체 다 외워도 손색없는 문제. 아이디어는 배열의 가로, 세로 계산 여부를 0,1로 나누어 1이면 가로계산에 이용하고 0이면 세로계산에 이용한다. 각 열, 행을 순회하며 1이 이어지면 왼쪽으로 한칸씩 늘려주며 누적합의 자릿수를 늘려주고 0이 나오면 자릿수를 초기화시키는 형식. def bitmask(): global maxAns # 비트마스크로 2^(N*M)의 경우의 수를 따져본다 for i in range(1

[백준][Python] 14945 불장난

dp[층수][둘사이 거리]의 경우의 수로 계산. 거리가 그대로일 경우 둘(아래아래, 대각,대각) 거리가 줄경우 하나(대각아래) 거리가 늘경우 하나(아래대각) 거리가 0인경우는 그냥 배제 import sys input = sys.stdin.readline n = int(input()) dp = [[0]*(n+1) for _ in range(n+1)] dp[2][1] = 2 for i in range(3,n+1): for j in range(1,i): dp[i][j] = (dp[i-1][j]*2 + dp[i-1][j-1] + dp[i-1][j+1])%10007 sum_n = 0 for i in range(1,n): sum_n += dp[n][i] print(sum_n%10007)