목록Algorithm/백준 (224)
Hanbit the Developer
https://www.acmicpc.net/problem/1707 1707번: 이분 그래프 입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K(2≤K≤5)가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V(1≤V≤20,000)와 간선의 개수 www.acmicpc.net import sys input = sys.stdin.readline def setVerticesColor(start): global verticesColor todo = [start] verticesColor[start] = 1 while todo: curVertex = todo.pop(0) for next in graph[curVertex]: if verticesColor[next]..
https://www.acmicpc.net/problem/1107 1107번: 리모컨 첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼 www.acmicpc.net import sys input = sys.stdin.readline def dfs(count): global minButtonClickCount, selectedDigits if (len(str(N))-1
https://www.acmicpc.net/problem/9461 9461번: 파도반 수열 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 www.acmicpc.net import sys input = sys.stdin.readline P = [0, 1, 1, 1, 2] T = int(input()) for _ in range(T): N = int(input()) for i in range(len(P), N+1): P.append(P[i-1] + P[i-5]) print(P[N]) 해당 수열을 분석해보면 P[n] = P[n-1] + P[n-5]라는 결론이 도출된다. ..
https://www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net import sys import copy input = sys.stdin.readline TOP, RIGHT, BOTTOM, LEFT = 0, 1, 2, 3 dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] def dfs(count): global board if count == 5: setMaxBlock(board) return for i in ra..
https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net import sys input = sys.stdin.readline left = list(input().rstrip()) right = [] M = int(input()) for _ in range(M): curLine = list(map(str, input().rstrip().split())) if curLine[0] == 'L' and left: right.append(left.pop()) el..
https://www.acmicpc.net/problem/2042 2042번: 구간 합 구하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)과 M(1 ≤ M ≤ 10,000), K(1 ≤ K ≤ 10,000) 가 주어진다. M은 수의 변경이 일어나는 횟수이고, K는 구간의 합을 구하는 횟수이다. 그리고 둘째 줄부터 N+1번째 줄 www.acmicpc.net import sys input = sys.stdin.readline class Node: def __init__(self): self.start = None self.end = None self.left = None self.right = None self.var = None def initializeSegmentTree(node, sta..
www.acmicpc.net/problem/2581 import sys input = sys.stdin.readline def isPrimeNumber(n): for i in range(2, int(n**(1/2))+1): if n % i == 0: return False return True M = int(input()) N = int(input()) isPrimeNumberList = [True]*(N+1) primeMin = 10001 primeSum = 0 for i in range(2, N+1): if isPrimeNumberList[i]: if not isPrimeNumber(i): isPrimeNumberList[i] = False continue isPrimeNumberList[i] = T..
www.acmicpc.net/problem/13460 import sys import copy input = sys.stdin.readline TOP, RIGHT, BOTTOM, LEFT = 0, 1, 2, 3 dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] def bfs(): global curMap, curRedPos, curBluePos todo = [[map, redPos, bluePos, 1]] # 2개의 구슬의 위치를 기록하여 중복을 허용하지 않도록 함 ballRecords = [[redPos, bluePos]] while todo: curOriginalMap, curOriginalRedPos, curOriginalBluePos, curCount = todo.pop( 0) ..
www.acmicpc.net/problem/1181 import sys input = sys.stdin.readline N = int(input()) words = set() for _ in range(N): words.add(input().rstrip()) words = list(words) words.sort() words.sort(key=lambda x: len(x)) for word in words: print(word) 우선 조건이 크게 두 개가 있다. 1. 조건에 따른 정렬 2. 중복된 문자는 1번만 출력함 일단 중복된 문자는 신경을 쓰지 않으므로, 순서는 없지만 중복을 허용하지 않는 집합(set)을 이용한다. 입력을 set()으로 초기화된 집합에 받아 중복을 걸러낸 이후에 이것을 리스트화 하..