알고리즘 공부/백준 99

(Python)백준 코딩테스트 연습 - N번째 큰 수(2075)

1. 문제 https://www.acmicpc.net/problem/2075 2075번: N번째 큰 수 첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다. www.acmicpc.net 2. 풀이 import sys input = sys.stdin.readline from heapq import heappush, heappop # n : n*n의 수가 주어질 때의 n, n번째 큰 수를 찾기 위해 주어지는 n n = int(input()) heap = [] for i in range(n): for j in map(int, input().split()): heappush(heap..

(Python)백준 코딩테스트 연습 - 오목(2072)

1. 문제 https://www.acmicpc.net/problem/2072 2072번: 오목 19x19크기의 바둑판에, 돌을 놓을 좌표가 주어지면 이 게임이 몇 수만에 끝나는 지를 알아보려고 한다. 사용하고자 하는 바둑판의 모양은 위의 그림과 같으며, (1, 1)이 가장 왼쪽 위의 좌표이고 (19 www.acmicpc.net 2. 풀이 import sys input = sys.stdin.readline # n : 놓이는 돌의 개수 n = int(input()) def winCheck(nList, x, y, stoneColor): stoneCnt = 1 xPoint = x yPoint = y while True: xPoint -= 1 yPoint -= 1 if xPoint 19 or nList[xPoin..

(Python)백준 코딩테스트 연습 - 조합 0의 개수(2004)

1. 문제 https://www.acmicpc.net/problem/2004 2004번: 조합 0의 개수 첫째 줄에 정수 $n$, $m$ ($0 \le m \le n \le 2,000,000,000$, $n \ne 0$)이 들어온다. www.acmicpc.net 2. 풀이 import sys input = sys.stdin.readline n, m = map(int, input().split()) twoNum = 0 fiveNum = 0 i = 1 while True: i *= 2 # print("two i :", i) if i > n: break else: twoNum += ((n // i) - ((n-m) // i)) # print("twoNum :", twoNum) # print() i = 1 wh..

(Python)백준 코딩테스트 연습 - 상자넣기(1965)

1. 문제 https://www.acmicpc.net/problem/1965 1965번: 상자넣기 정육면체 모양의 상자가 일렬로 늘어서 있다. 상자마다 크기가 주어져 있는데, 앞에 있는 상자의 크기가 뒤에 있는 상자의 크기보다 작으면, 앞에 있는 상자를 뒤에 있는 상자 안에 넣을 수가 www.acmicpc.net 2. 풀이 import sys input = sys.stdin.readline # n : 상자 개수 n = int(input()) # nList : 상자 크기 리스트 nList = list(map(int, input().split())) # dp : dp 값 리스트 dp = [1 for i in range(n)] for i in range(1, n): for j in range(0, i): if..

(Python)백준 코딩테스트 연습 - 최소 힙(1927)

1. 문제 https://www.acmicpc.net/problem/1927 2. 풀이 import sys input = sys.stdin.readline from collections import deque # n : 연산 개수 n = int(input()) # heap : 최소 힙 구조를 구현할 deque heap = deque() def popData(heap): popNum = heap.popleft() if len(heap) == 0: return popNum heap.appendleft(heap.pop()) parentIdx = 1 while True: childIdx1 = parentIdx * 2 childIdx2 = parentIdx * 2 + 1 # print("parentIdx :", ..

(Python)백준 코딩테스트 연습 - 연속합(1912)

1. 문제 https://www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 2. 풀이 import sys input = sys.stdin.readline # n : 주어지는 정수 수 n = int(input()) # nList : 정수 리스트 nList = list(map(int, input().split())) dp = [0 for i in range(n)] dp[0] = nList[0] for i in range(1, n): dp[i] = max(dp[i-1] + n..

(Python)백준 코딩테스트 연습 - 타일링(1793)

1. 문제 https://www.acmicpc.net/problem/1793 1793번: 타일링 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 정수 n이 주어진다. www.acmicpc.net 2. 풀이 import sys input = sys.stdin.readline # inputList : input값을 저장할 리스트 inputList = [] while True: try: inputValue = input() inputList.append(int(inputValue)) except: break # maxValue : input값 중 max 값 maxValue = max(inputList) # dpList : dp값을 저장할 리스트 dpList = ..

(Python)백준 코딩테스트 연습 - 종이의 개수(1780)

1. 문제 https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수 www.acmicpc.net 2. 풀이 import sys input = sys.stdin.readline # n : 종이의 크기 n = int(input()) # cntList : -1, 0, 1의 개수를 저장할 리스트 cntList = [0 for i in range(3)] # paperList : 종이의 수들을 입력할 이차원 리스트 paperList = [list(map(int, input().st..

(Python)백준 코딩테스트 연습 - 크로스워드(1706)

1. 문제 https://www.acmicpc.net/problem/1706 1706번: 크로스워드 동혁이는 크로스워드 퍼즐을 좋아한다. R×C 크기의 크로스워드 퍼즐을 생각해 보자. 이 퍼즐은 R×C 크기의 표로 이루어지는데, 퍼즐을 다 풀면 금지된 칸을 제외하고는 각 칸에 알파벳이 하나씩 www.acmicpc.net 2. 풀이 import sys # input = sys.stdin.readline # r, c : 크로스 워드 크기 r, c = map(int, input().split()) # rList : 가로 문자열 리스트 rList = [] # cList : 세로 문자열 리스트 cList = ["" for i in range(c)] for i in range(r): word = input().st..

(Python)백준 코딩테스트 연습 - 제곱수의 합(1699)

1. 문제 https://www.acmicpc.net/problem/1699 1699번: 제곱수의 합 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다 www.acmicpc.net 2. 풀이 import sys input = sys.stdin.readline import math # n : 제곱의 합들로 나타낼 자연수 n = int(input()) dp = [i for i in range(n+1)] for i in range(1, n+1): for j in range(1, int(math.sqrt(i)) + 1): dp[i]..