'-3+27-6'등의 문자열 계산식이 들어오면 계산해서 반환해줌.. 문자열 계산식이라고만 검색해도 맞았는데..
solution함수 외에 import 작성 가능하고 다른 함수 작성도 가능함!! 그냥 편하게 쓰면된다.
다차원 배열을 효과적으로 다루기 위한 파이썬 라이브러리.
axis 0 vector 1차원
axis 1 matrix 행렬 2차원
axis 2 tensor 채널 3차원
이렇게 부른다
import numpy as np
array = np.arange(4) 하면 [0,1,2,3] 배열 만들어준다
array2 = np.zeros(shape=(4,4),dtype = float) 하면 4x4배열을 0으로 초기화하고 데이터타입은 float으로 만들어준다.
def solution(array):
return len(array), len(array[0])
print(solution([[1, 0, 1], [1, 1, 1], [1, 1, 1]]))
abs()함수 쓰면 변수 전부 양수로 저장 가능
flag개념 활용할 수 있다 flag=True 된 이후의 원소들은 전부 저장 이런식으로
set()사용하면 좋다. set에다가 저장하면 자동으로 sort해주고 중복도 제거해준다. 그다음 list로 바꿔서 제출해도 된다.
def solution(history, infected):
inList = []
outList = []
for i in range(len(history)):
if history[i] == infected:
inList.append(i)
if history[i] == -infected:
outList.append(i)
suspect = set()
for i in range(len(inList)):
array = history[inList[i]+1:outList[i]]
for j in array:
suspect.add(abs(j))
return sorted(list(suspect))
print(solution( [3, 2, -3, 1, -1, -2, 4, -4, 1, -1],2))
꽤 괜찮은 풀이를 내가 세워서 넣었는데 그래도 이건 infected전에 들어온 사람들 카운트 못함 infected들어왔다 나가는 사이에 이동있는 사람을 체크한것. 대신 infected가 여러번 왔다갔다하는 상황 케어가능!
def solution(history, infected):
now = set()
flag = False
print(infected)
for h in history:
if h == infected:
flag = True
continue
if h == -infected:
break
if h > 0:
now.add(h)
else:
if not flag:
now.remove(-h)
return sorted(list(now))
다른사람 풀이 근데 확진자가 여러번 왔다갔다하면 체크를 못함. 대신 플래그 개념이 아주 좋았음. 특정 조건에 플래그를 켜고 플래그가 켜진 상황 이후의 것들은 다른 조건을 적용한다!
def solution(history, infected):
suspect = set()
terminated=set()
flag = False
for i in range(len(history)):
if history[i] == infected:
flag = True
continue
if history[i] == -infected:
if infected not in history[i+1:]:
for i in list(suspect):
terminated.add(i)
break
else:
flag= False
for i in list(suspect):
terminated.add(i)
continue
if history[i] > 0:
suspect.add(history[i])
else:
if not flag:
suspect.remove(-history[i])
return sorted(list(terminated))
print(solution( [3, 2, -3, 1, -1, -2, 4, -4, 1, -1,5,2,6,-5,-2,-6],2)
모든 상황 케어가능
def solution(l):
array = l.copy()
array.sort()
total = 0
for i in array:
tmp = 0
for j in l:
if i<=j:
tmp+=i
else:
total = max(total,tmp)
break
total = max(total,tmp)
return total
만약에 array = l 이런식으로 배열이름 자체를 주게 되면 주소값을 공유하게 되어서 array를 sort 하면 l도 똑같은 참조값을 가져서 sort되게 된다. 그러므로 배열을 복사해서 넣기 위해서 list.copy()를 하게 되면 복사된 리스트를 반환한다! 중요한 정보임.
당신은 수직선 위에 서있습니다. 그리고 당신은 같은 수직선 위의 n미터 떨어진 목적지로 가려고 합니다. 당신은 한번에 수직선 위를 k 이하의 정수 거리만큼 이동할 수 있으며, 처음 이동한 방향으로만 계속 이동할 수 있습니다. 그리고 직전에 이동한 거리와 같은 거리만큼 다시 이동할 수는 없습니다.
예를 들어, 3-2-3 순서대로 이동했다면 다음에 3만큼 이동할 수 없습니다.
수직선 길이 n과 이동 가능한 최대 거리 k가 주어질 때, 목적지에 도착 가능한 경로의 경우의 수를 출력하는 함수, solution을 완성해주세요.
결과 값이 매우 클 수 있으니, 1,000,000,007로 나눈 나머지 값을 구해주세요.
[입력 형식]
n은 1 이상 1,000 이하의 정수입니다.
k는 1 이상 100 이하의 정수입니다.
[출력 형식]
목적지로 도착 가능한 경로의 경우의 수를 1,000,000,007로 나눈 나머지 값을 int 형식으로 출력합니다.
def solution(n, k):
ans = 0
def dfs(depth, index):
nonlocal ans
if depth == n:
ans = (ans + 1) % 1_000_000_007
return
elif depth > n:
return
for i in range(1, k + 1):
if i == index:
continue
dfs(depth + i, i)
dfs(0, -1)
return ans
print(solution(4,3))
낱말 퍼즐을 풀려고 합니다. 퍼즐 판은 4 x 4 크기로 임의의 한글이 섞여 있습니다.
주어진 낱말이 퍼즐 판에 인접한 형태로 존재하는지 구하는 함수, solution을 완성해주세요.
예를 들어, puzzle [[대, 한, 가, 나], [국, 민, 다, 라], [마, 바, 사, 아], [자, 차, 카, 타]] 과 word 대한민국이 있을 때,
puzzle[0][0] = 대
puzzle[0][1] = 한
puzzle[1][1] = 민
puzzle[1][0] = 국
으로 결과는 true입니다.
[제한 사항]
모든 낱말은 한글입니다.
인접함은 상하좌우로 붙어있는 단어를 말합니다.
word는 공백없는 문자열입니다.
한번 사용된 퍼즐 판의 낱말은 또다시 사용할 수 없습니다.
[입력 형식]
puzzle은 4 * 4 크기의 배열입니다.
word는 길이가 1 이상 10 이하의 문자열입니다.
[출력 형식]
주어진 낱말이 퍼즐 판에 인접한 형태로 존재하는 지를 boolean 형식으로 출력합니다.
from collections import deque
def bfs(a, b, word, puzzle):
dx = [-1, 0, 1, 0]
dy = [0, -1, 0, 1]
q = deque()
q.append((a, b, 1))
visit = [[0 for _ in range(4)] for _ in range(4)]
visit[b][a] = 1
while q:
x, y, index = q.popleft()
if index == len(word):
return True
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < 4 and 0<= ny < 4:
if puzzle[ny][nx] == word[index] and visit[ny][nx] == 0:
visit[ny][nx] = 1
q.append((nx, ny, index + 1))
return False
def solution(puzzle, word):
for y in range(len(puzzle)):
for x in range(len(puzzle[y])):
if puzzle[y][x] == word[0]:
if bfs(x, y, word, puzzle):
return True
return False
list(filter(lambda x: x % 2, range(10))) # 파이썬 2 및 파이썬 3
[1, 3, 5, 7, 9]