Algorithm (19) 썸네일형 리스트형 #169 백준 파이썬 [2914] 저작권 https://www.acmicpc.net/problem/2914 #Solution A, I = map(int, input().split()) print(A*(I-1)+1) #168 백준 파이썬 [2530] 인공지능 시계 https://www.acmicpc.net/problem/2530 #Solution H, M, S = map(int, input().split()) D = int(input()) S += D % 60 D = D // 60 if S >= 60: S -= 60 M += 1 M += D % 60 D = D // 60 if M >= 60: M -= 60 H += 1 H += D % 24 if H >= 24: H -= 24 print(H,M,S) #162 백준 파이썬 [2667] 단지번호붙이기 - BFS https://www.acmicpc.net/problem/2667 #Solution BFS로 2차원 배열 리스트에 근접한 같은 수를 알아내는 문제이다. 미로 문제를 약간 변형한 것이라 보면된다. 다음과 같은 알고리즘을따른다. 1) house[0][0]부터 house[N][N]까지, 하나씩 검사한다. 2-0) 0이 나올 경우 pass 2-1) 1이 나올 경우 상하좌우 인접한 모든 집을 구해준다. 3) BFS(너비 우선 탐색)를 이용해 인접한 노드를 구한다. 4) queue의 앞에서 부터 하나씩 pop하여 block과 visited 두 리스트에 추가해준다. 5) 상하좌우에 집이 있고, block과 queue에 없다면 해당 집을 queue에 추가해준다. 6) queue가 빌 때까지 계속해준다. 7) block.. #161 백준 파이썬 [1541] 잃어버린 괄호 https://www.acmicpc.net/problem/1541 #Solution 문제의 알고리즘은 간단하다. -가 존재할 시, 다음 -가 오기 전까지 모든 수를 더해주면 된다. 없다면 그대로 수식을 출력. eval을 이용해 야매로 계산하려고 했는데 0으로 시작하는 수 때문에 자꾸 Error가 났다. 따라서 처음 입력을 받을 때부터 +와 -로 split하고, int로 숫자를 받음으로써 이 문제를 해결하였다. string = [sum([int(plus) for plus in minus.split('+')]) for minus in input().split('-')] print(string[0] - sum(string[1:])) #158 백준 파이썬 [9251] LCS https://www.acmicpc.net/problem/9251 #Solution https://twinw.tistory.com/126 참조. 두 문자열의 LCS(Longest Common Subsequence)를 찾는 알고리즘은 2차원 배열로 정답을 구할 수 있다. 아래와 같은 알고리즘으로 푼다. 1) 각 문자열 길이에 1을 더한 값을 X축, Y축으로 두고 0을 대입한다. 2) A[i]와 B[j]가 같은 arr[j][i]자리의 값은 위 혹은 왼쪽 중 큰 값을 대입해준다. - A의 시작부터 본 값 or B의 시작부터 대입한 값 중 제일 긴 것이 들어가는 것 3) A[i]와 B[j]가 같은 arr[j][i]자리의 값은 대각선 왼쪽 위의 값에 +1 해준 값을 대입해준다. - 위나 왼쪽이 아닌이유?: 같은 .. #156 백준 파이썬 [11054] 가장 긴 바이토닉 부분 수열 - LIS https://www.acmicpc.net/problem/11054 #Solution 가장 긴 수열 찾기 https://claude-u.tistory.com/184 참조. 순방향 한번, 역방향 한번으로 함수를 돌려준 뒤, 더해준다. 그 뒤 가장 긴 수열을 출력해주면 된다. O(n^2)이 나올텐데 아직(?)은 시간 초과가 안나기에 쉬운 코드로 돌려주었다. A = int(input()) A_list = list(map(int, input().split())) result = [[] for _ in range(A)] #순방향 돌려주기 for i in range(A): if i == 0: result[i].append(A_list[i]) else: for j in range(0, i): if result[j][.. #148 백준 파이썬 [11866] 조세퍼스 문제 0 https://www.acmicpc.net/problem/11866 #Solution 숫자를 담은 리스트(stack), 이를 지속적으로 도는 temp, 맞는 숫자를 pop하여 result에 넣는 식을 통해 간단하게 해결할 수 있다. N, K = map(int, input().split()) stack = [i for i in range(1, N + 1)] result = [] temp = K - 1 for i in range(N): if len(stack) > temp: result.append(stack.pop(temp)) temp += K - 1 elif len(stack) #147 백준 파이썬 [1932] 정수 삼각형 https://www.acmicpc.net/problem/1932 #Solution 삼각형의 제일 밑에서부터 최댓값을 저장해가면서 올라간다. 대각선 왼쪽 아래와 대각선 오른쪽 아래 중 큰 수와 자기자신을 더한 값이 그 아래 경로의 최댓값이다. triangle = int(input()) triangle_matrix = [] max_matrix = [[] for _ in range(triangle)] for _ in range(triangle): triangle_matrix.append(list(map(int, input().split()))) #역순으로 하위 항목을 모두 더한 최댓값을 저장 for i in range(triangle - 1, -1, -1): for j in range(len(triangle.. 이전 1 2 3 다음