https://www.acmicpc.net/problem/11054 왼쪽으로 오른쪽으로 가면서, 현재 지점까지 가장 긴 증가 수열의 길이를 갱신해가며 dp 방식으로 풀면 된다.똑같이 오른쪽에서 왼쪽으로 가면서, 감소 수열의 길이를 갱신하며 풀어 그 둘을 합치고 1을 뺀 값이 가장 큰 수를 출력한다.import sysinput = sys.stdin.readlinen = int(input())up = [1 for _ in range(n)] # ~ i번째까지 가장 긴 증가 수열 길이down = [1 for _ in range(n)] # i ~ 끝까지 가장 긴 감소 수열 길이arr = list(map(int, input().split()))## 증가하는 부분수열 최대 길이for i in range(n): ..
https://www.acmicpc.net/problem/1946import sysinput = sys.stdin.readlinet = int(input())ans = [0]*tfor idx in range(t): n = int(input()) arr = [0 for _ in range(n+1)] # 서류 -> 면접 등수 for i in range(1, n+1): a,b = map(int, input().split()) arr[a]=b cnt =1 min_speak = arr[1] # 서류 1등 무조건 채용 -> 최소 면접 등수 for i in range(2, n+1): if arr[i]
https://www.acmicpc.net/problem/14626import sysinput = sys.stdin.readlinenum = list(input().rstrip())div=3sum=0for i in range(13): if num[i]=='*': if i%2==0 : div=1 else: sum+= int(num[i])*(1 if i%2==0 else 3)lastnum = (10 - (sum)%10)%10for x in range(0,10): if (div*x)%10 == lastnum: print(x) 3을 곱한 숫자의 경우, 10보다 커질 수 있어 일의 자릿수끼리 비교해야 한다!
https://www.acmicpc.net/problem/12851import sysfrom collections import dequeinput = sys.stdin.readlinen, k =map(int, input().split())visited = [float('inf')]*100001queue = deque() # 위치, 시간queue.append((n,0))visited[n]=0min_time=float('inf')cnt=0while queue: now, time = queue.popleft() if time>min_time: continue if now == k: if time =time+1: # 시간 같거나 단축 가능 ..
https://www.acmicpc.net/problem/11403import syssys.setrecursionlimit(10000)input = sys.stdin.readlinen = int(input())graph = [list(map(int, input().split())) for _ in range(n)]def dfs(start, now, visited): for x in range(n): if graph[now][x]==1 and not visited[x]: graph[start][x]=1 # 도달 가능 visited[x]=True dfs(start, x, visited)for i in range(n): visi..
https://www.acmicpc.net/problem/1182import sysinput = sys.stdin.readlinen, s= map(int, input().split())# 정수 n개 수열, 합이 s가 되는 부분수열arr = [0]+list(map(int, input().split()))cnt = 0# 그냥 모두 트라이하기 - 백트래킹으로....# visited 없이 이전 인덱스보다 이후로 함 (겹치는 거 x)def dfs(now, sum): if sum==s: global cnt cnt+=1 if now == n: return for i in range(now+1, n+1): dfs(i, sum+arr[i])dfs(0,0)if s==..
https://www.acmicpc.net/problem/2580import sysinput = sys.stdin.readlineboard = []blanks = [] # 빈칸 좌표 (queue 대신 사용)for i in range(9): row = list(map(int, input().split())) board.append(row) for j in range(9): if row[j] == 0: blanks.append((i, j))# 특정 위치에 숫자를 놓을 수 있는지 확인하는 함수def is_promising(y, x, num): # 가로줄 검사 if num in board[y]: return False # 세로줄..