Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import sys
input = sys.stdin.readline


def findNum(arr, start, end, tf):
if start > end:
return -1
mid = (start + end) // 2
if arr[mid] == tf:
return mid
elif arr[mid] >= tf:
return findNum(arr, start, mid-1, tf)
else:
return findNum(arr, mid+1, end, tf)


N = int(input())
arr = sorted(list(map(int, input().split())))
M = int(input())
toFind = list(map(int, input().split()))
answer = []

for tf in toFind:
index = findNum(arr, 0, N - 1, tf)
if index == -1:
answer.append(0)
else:
num = 1
temp = index - 1
while temp >= 0 and arr[temp] == tf:
num += 1
temp -= 1
temp = index + 1
while temp <= len(arr) - 1 and arr[temp] == tf:
num += 1
temp += 1
answer.append(num)

for v in answer:
print(v, end=" ")
15 changes: 15 additions & 0 deletions herbi/백준/10816(숫자 카드2)/10816(숫자 카드2).py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import sys
input = sys.stdin.readline
answer = []
bucket = [0] * 20000001

int(input())
for v in list(map(int, input().split())):
bucket[v + 10000000] += 1

int(input())
for v in list(map(int, input().split())):
answer.append(bucket[v + 10000000])

for v in answer:
print(v, end=" ")
13 changes: 13 additions & 0 deletions herbi/백준/10816(숫자 카드2)/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
### 아분 탐색 - 10816(숫자카드 2)
___

[링크](https://www.acmicpc.net/problem/10816)

시간복잡도 : O(N)

1. Hash Map을 활용하여 문제를 푼다.

___
### 참고
* 실패코드 -> 이분탐색을 활용하면 시간초과가 난다.
* 입력받은 수를 모두 배열에 저장하면 10\^7 * 4Byte = 39MB가 된다.
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import sys
input = sys.stdin.readline

N, M, K = map(int,input().split())
feed = [list(map(int,input().split())) for _ in range(N)]
matrix = [[[5,[]] for _ in range(N)] for __ in range(N)]

for _ in range(M):
x,y,age = map(int,input().split())
matrix[x-1][y-1][1].append(age)

for x in range(N):
for y in range(N):
matrix[x][y][1].sort()

for _ in range(K):
# spring
for x in range(N):
for y in range(N):
todel = []
for i,tree in enumerate(matrix[x][y][1]):
if matrix[x][y][0] >= tree:
matrix[x][y][0] -= tree
matrix[x][y][1][i] += 1
else:
todel.append(i)
for td in todel[::-1]:
# summer
matrix[x][y][0] += matrix[x][y][1][td] // 2
del matrix[x][y][1][td]
matrix[x][y][1].sort()
# fall
for x in range(N):
for y in range(N):
for tree in matrix[x][y][1]:
if tree % 5 == 0:
for tx in range(x-1,x+2):
for ty in range(y-1,y+2):
if 0 <= tx < N and 0 <= ty < N and (tx != x or ty != y):
matrix[tx][ty][1].insert(0,1)
# winter
matrix[x][y][0] += feed[x][y]

answer = 0
for x in range(N):
for y in range(N):
answer += len(matrix[x][y][1])
print(answer)
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
from collections import deque

import sys
input = sys.stdin.readline

N, M, K = map(int,input().split())
feed = [list(map(int,input().split())) for _ in range(N)]
matrix = [[[5,deque()] for _ in range(N)] for __ in range(N)]
treemap = set()
for _ in range(M):
x,y,age = map(int,input().split())
matrix[x-1][y-1][1].append(age)
treemap.add((x-1,y-1))

for _ in range(K):

# spring
temp = set()
for x,y in treemap:
delidx = len(matrix[x][y][1])
for i,tree in enumerate(matrix[x][y][1]):
if matrix[x][y][0] >= tree:
matrix[x][y][0] -= tree
matrix[x][y][1][i] += 1
else:
delidx = i
break
for _ in range(delidx, len(matrix[x][y][1])):
# summer
matrix[x][y][0] += matrix[x][y][1][-1] // 2
matrix[x][y][1].pop()
if len(matrix[x][y][1]) == 0:
temp.add((x,y))
treemap -= temp

# fall
temp = set()
for x,y in treemap:
for tree in matrix[x][y][1]:
if tree % 5 == 0:
for tx in range(x-1,x+2):
for ty in range(y-1,y+2):
if 0 <= tx < N and 0 <= ty < N and (tx != x or ty != y):
matrix[tx][ty][1].appendleft(1)
temp.add((tx,ty))
treemap |= temp

# winter
for x in range(N):
for y in range(N):
matrix[x][y][0] += feed[x][y]

answer = 0
for x, y in treemap:
answer += len(matrix[x][y][1])
print(answer)
49 changes: 49 additions & 0 deletions herbi/백준/16235(나무 재테크)/16235(나무 재테크).py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
from collections import deque

import sys
input = sys.stdin.readline

N, M, K = map(int,input().split())
feed = [list(map(int,input().split())) for _ in range(N)]
treemap = [[deque() for _ in range(N)] for __ in range(N)]
land = [[5] * N for _ in range(N)]

for _ in range(M):
x,y,age = map(int,input().split())
treemap[x-1][y-1].append(age)

for _ in range(K):

# spring
for x in range(N):
for y in range(N):
delidx = 0
for i,tree in enumerate(treemap[x][y]):
if land[x][y] >= tree:
land[x][y] -= tree
treemap[x][y][i] += 1
delidx += 1
else:
break
for _ in range(delidx, len(treemap[x][y])):
# summer
land[x][y] += treemap[x][y][-1] // 2
treemap[x][y].pop()

# fall
for x in range(N):
for y in range(N):
for tree in treemap[x][y]:
if tree % 5 == 0:
for tx in range(x-1,x+2):
for ty in range(y-1,y+2):
if 0 <= tx < N and 0 <= ty < N and (tx != x or ty != y):
treemap[tx][ty].appendleft(1)
# winter
land[x][y] += feed[x][y]

answer = 0
for x in range(N):
for y in range(N):
answer += len(treemap[x][y])
print(answer)
9 changes: 9 additions & 0 deletions herbi/백준/16235(나무 재테크)/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
### 아분 탐색 - 16235(나무 재테크)
___

[링크](https://www.acmicpc.net/problem/16235)

[노션정리링크](https://www.notion.so/16235-PYTHON-60e199f90b4e4e79b587a60c9076e014)

___
### 참고
27 changes: 27 additions & 0 deletions herbi/백준/1920(수 찾기)/1920(수 찾기).py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import sys
input = sys.stdin.readline


def findNum(arr, start, end, tf):
if start > end:
return -1
mid = (start + end) // 2
if arr[mid] == tf:
return mid
elif arr[mid] >= tf:
return findNum(arr, start, mid-1, tf)
else:
return findNum(arr, mid+1, end, tf)


N = int(input())
arr = sorted(list(map(int, input().split())))
M = int(input())
toFind = list(map(int, input().split()))

for tf in toFind:
index = findNum(arr, 0, N - 1, tf)
if index == -1:
print(0)
else:
print(1)
11 changes: 11 additions & 0 deletions herbi/백준/1920(수 찾기)/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
### 아분 탐색 - 1920(수 찾기)
___

[링크](https://www.acmicpc.net/problem/1920)

시간복잡도 : O(MlogN)

1. 이분탐색을 활용해 숫자가 존재하면 1, 존재하지 않으면 0을 출력한다.

___
### 참고
12 changes: 12 additions & 0 deletions herbi/프로그래머스/게임 맵 최단거리/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
### 모든 문제 - 게임 맵 최단거리
___

[링크](https://programmers.co.kr/learn/courses/30/lessons/1844?language=python3)

시간복잡도 : O(N^2)

1. BFS로 배열을 차례로 탐색한다.
2. 각 가중치가 1이므로 단순 BFS로 문제를 해결할 수 있다.

___
### 참고
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from collections import deque

def solution(maps):
answer = -1
rown = len(maps)
coln = len(maps[0])
queue = deque()
queue.append((1,(0,0)))
while len(queue) > 0:
cost , (x,y) = queue.popleft()
print(x,y, cost)
if maps[x][y] == 0:
continue
if x == rown - 1 and y == coln - 1 and maps[x][y] == 1:
answer = cost
break
maps[x][y] = 0
if x > 0 and maps[x - 1][y] == 1:
queue.append((cost + 1, (x - 1, y)))
if y > 0 and maps[x][y - 1] == 1:
queue.append((cost + 1, (x, y - 1)))
if x < rown - 1 and maps[x + 1][y] == 1:
queue.append((cost + 1, (x + 1, y)))
if y < coln - 1 and maps[x][y + 1] == 1:
queue.append((cost + 1, (x, y + 1)))
return answer