목록Algorithm/백준 (224)
Hanbit the Developer
def checkIsHansu(num): strNum = str(num) if len(strNum) >= 3: lastDiff = int(strNum[1]) - int(strNum[0]) for i in range(1, len(strNum)-1): if int(strNum[i+1]) - int(strNum[i]) != lastDiff: return False lastDiff = int(strNum[i+1]) - int(strNum[i]) return True hansuCount = 0 X = int(input()) for i in range(1, X+1): if checkIsHansu(i): hansuCount += 1 print(hansuCount) checkIsHansu()만 알면 된다. 숫자를 st..
www.acmicpc.net/problem/3020 import sys input = sys.stdin.readline N, H = map(int, input().split()) bottomObstacles = [0]*H topObstacles = [0]*H for i in range(N//2): o1, o2 = int(input()), int(input()) bottomObstacles[o1-1] += 1 topObstacles[o2-1] += 1 bottomPrefixSum = [0]*(H+1) topPrefixSum = [0]*(H+1) for i in range(H-1, -1, -1): bottomPrefixSum[i] = bottomPrefixSum[i+1] + bottomObstacles[i]..
www.acmicpc.net/problem/12904 S = list(input()) T = list(input()) lenS = len(S) while lenS T로 bfs를 이용해서 풀고자 하였는데, 아무리 시간 복잡도를 줄여도 소용이 없었다. 실은, 특정 문자열을 얻기 위한 방법이 오로지 하나였다. 그렇지 않은 줄 알고 많은 경우를 고려하려고 하였던 것이다. 풀이법은 간단하다. T의 마지막 문자에 따라서, A만 없애거나, B를 없애고 뒤집거나, 둘 중 하나의 연산을 해주고, T가 결국 S의 길이와 같게 되면 비교를..
www.acmicpc.net/problem/11497 11497번: 통나무 건너뛰기 남규는 통나무를 세워 놓고 건너뛰기를 좋아한다. 그래서 N개의 통나무를 원형으로 세워 놓고 뛰어놀려고 한다. 남규는 원형으로 인접한 옆 통나무로 건너뛰는데, 이때 각 인접한 통나무의 높이 www.acmicpc.net import sys input = sys.stdin.readline def getMaxDifferenceBetweenAdjacent(nums): nums.sort() maxDifference = max(abs(nums[0]-nums[1]), abs(nums[-1]-nums[-2])) for i in range(N-2): maxDifference = max(maxDifference, abs(nums[i]-num..
www.acmicpc.net/problem/2252 2252번: 줄 세우기 첫째 줄에 N(1≤N≤32,000), M(1≤M≤100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의미이 www.acmicpc.net import sys N, M = map(int, input().split()) graph = [[] for _ in range(N+1)] degree = [0 for _ in range(N+1)] for _ in range(M): inputL, inputR = map(int, input().split()) degree[inputR] += 1 graph[inputL].append(..
www.acmicpc.net/problem/7579 7579번: 앱 입력은 3줄로 이루어져 있다. 첫 줄에는 정수 N과 M이 공백문자로 구분되어 주어지며, 둘째 줄과 셋째 줄에는 각각 N개의 정수가 공백문자로 구분되어 주어진다. 둘째 줄의 N개의 정수는 현재 활 www.acmicpc.net import sys input = sys.stdin.readline N, M = map(int, input().split()) memories = [0] + list(map(int, input().split())) costs = [0] + list(map(int, input().split())) costSum = sum(costs) dp = [[0]*(costSum+1) for _ in range(N+1)] minCo..
www.acmicpc.net/problem/2589 2589번: 보물섬 보물섬 지도를 발견한 후크 선장은 보물을 찾아나섰다. 보물섬 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 각 칸은 육지(L)나 바다(W)로 표시되어 있다. 이 지도에서 www.acmicpc.net import sys input = sys.stdin.readline def bfs(x, y): global maxSpentTime dx = [1, -1, 0, 0] dy = [0, 0, 1, -1] spentTimeMap = [[-1]*M for _ in range(N)] spentTimeMap[x][y] = 0 todo = [(x, y)] while todo: x, y = todo.pop(0) for i in r..
www.acmicpc.net/problem/4358 4358번: 생태학 프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어 www.acmicpc.net import sys input = sys.stdin.readline trees = {} treeCount = 0 while True: curInput = input().rstrip() if not curInput: break if trees.get(curInput): trees[curInput] += 1 else: trees[curInput] = 1 treeCount += 1 sortedTreesNa..
www.acmicpc.net/problem/10775 import sys input = sys.stdin.readline def findParent(x): if parent[x] == x: return x p = findParent(parent[x]) parent[x] = p return p def union(x, y): x = findParent(x) y = findParent(y) if x < y: parent[y] = x else: parent[x] = y if __name__ == '__main__': G = int(input()) P = int(input()) airplanes = [int(input()) for _ in range(P)] parent = [i for i in range(G+1)..
www.acmicpc.net/problem/13904 import sys input = sys.stdin.readline N = int(input()) homeworks = [] for _ in range(N): homeworks.append(list(map(int, input().split()))) homeworks.sort(reverse=True, key=lambda x: x[1]) score = 0 days = [0]*1001 for homework in homeworks: for d in range(homework[0], 0, -1): if days[d] == 0: days[d] = 1 score += homework[1] break print(score) 값을 입력 받고, 이것을 받는 점수를 기..