알고리즘 문제 풀기용 array 연습 (python)
python input으로 배열을 받아보는 연습 노트
📜 제목으로 보기✏마지막 댓글로
a, b = map(int, input().split())
print(a, b)
# 1개는 안된다. 튜플 언패킹시에만 따로 받아진다!!
c = map(int, input().split())
print(c)
arr = list( map(int, input().split()) )
arr
# - 행수만큼 list comp를 돌리고,
# - 그 행의 내부요소들은 1줄을 split -> map(int, ) -> list 까지 만든다.
N = int(input().strip())
# paper = [ for i in range(N)]
paper = [ list(map(int, input().strip().split())) for i in range(N)]
paper
list('1019')
list(map(int, '1019'))
# - split대신 list('문자열') -> 1글자씩 list
# - split대신 list( map(int, '문자열')) -> 숫자1개씩 list
# -- map(int, '문자열')은 문자열을 하나씩 쪼개받아서 int를씌운다.
N, M = map(int, input().split()) # map은 튜플로 할당 받을 수 있다. but 1개 변수에 할당시는 맵객체다.
# MIRO = [ for i in range(N) ]
# 열은 갯수는 M대신 split이 아닌 문자열->map->list -> list(map(())으로 쪼개서 받았다.
MIRO = [ list(map(int, input())) for i in range(N) ]
MIRO
INIT = -1 # 각 행렬 요소의 초기화 값이다.
W = row = N
H = column = M
C = channel = 3
B = batch = 3
# 1차원 array : 초기화값이 요소 상태로 list comp
D1 = [ INIT for _ in range(W)] # 1차원은 행길이만큼 list comp + [] X -> 행길이만큼 요소롤 복제하도록 list comp + 요소
# D1 = [ INIT ] * N # 요소복제의 2번째 방법, list든 str든 곱하면 extend된다.
# - but 내부 list comp 요소 + 외부 [] 그만큼 곱은 주의한다. id가 동일한놈들이 복사된다.
# 2차원 array : 행[]들 먼저 행길이만큼 list comp돌고 , 내부 1row를 요소 list comp
# D2 = [ [] for _ in range(H)]
D2 = [ [ INIT for _ in range(W) ] for _ in range(H)]
# 3차원 array : 2차원 밖에 [[]]행렬 갯수만큼 list comp 해줌.
D3 = [[[ [ INIT for _ in range(W) ] for _ in range(H)]] for _ in range(C)]
# 3차원 array : 2차원 밖에 [[]]행렬 갯수만큼 list comp 해줌.
D4 = [[[[ [ INIT for _ in range(W) ] for _ in range(H)]] for _ in range(C)] for _ in range(B)]
print(D1)
print(D2)
print(D3)
print(D4)
# - 일단 1 ~ n*(n-1)/2 에서 마지막항의 의미는 그냥 찍어보면 모른다.
n = 6
for i in range(1, n*(n-1)+2, n):
print(i)
print(n*(n-1)+2)
# - for문 안의 i가 1에서부터 **등차(k)수열**이 되어버림.
# 1부터, 등차가 n이면, n열짜리 행1개를 건너띈 다음 행 첫째항이 된다.
# 열의 갯수N을 등차로 하여 일반항을 잡고, 행 N개를 가야하므로
# An = 1 + (n-1)*d = n*(n-1) + 1 이 된다.
# 등차수열 range(1, ,n)이 n번째항 까지는 가야하므로, n번째항+1을 넣어준 것이다.
for i in range(1, n*(n-1)+2, n):
print(i, "<<< 1시작, N열(등차), N행까지 채워주는 행렬의 각 행 첫째항입니다.")
# 2중 list comp는 요소만 노출할 경우, 1차원 행렬밖에
# - list로 만들경우, 각 요소들이 list로..
# - 행단위로 묵어서는 못만든다 -> result = [] for문 이용
n = 5
result = []
for i in range(1, n*(n-1)+2, n):
# 첫째항 i, 등차1 의 수열을 1~n항까지 listcomp로 모으기
result.append([ i+(j-1)*1 for j in range(1, n+1)])
result
# 행마다 돌면서 row에접근후 인덱싱..
[ row[4:6] for row in paper[4:7]]
def check_valid(matrix):
print("dict상태>>>", count_dict)
if len(matrix) == 1:
print("1개짜리 돌입. matrix >>>", matrix)
# 1개짜리라면.. 넣고 +1
count_dict.setdefault(matrix[0][0], 0)
count_dict[matrix[0][0]] +=1
return True
paper_0_0 = matrix[0][0]
flag = False
for i in range(len(matrix)):
for j in range(len(matrix)):
if paper_0_0 != matrix[i][j]:
flag = True
break
if flag:
print("다른게 나왔다. N/3으로 한번더.. 총 9개... 대상 matrix : ",matrix )
N = len(matrix)
# 3x3중 1x1 -> 열 3구간 다
check_valid([ row[:N//3] for row in matrix[:N//3]])
check_valid([ row[N//3:(N//3)*2] for row in matrix[:N//3]])
check_valid([ row[(N//3)*2:] for row in matrix[:N//3]])
# 3x3중 2x2
check_valid([ row[:N//3] for row in matrix[N//3:(N//3)*2]])
check_valid([ row[N//3:(N//3)*2] for row in matrix[N//3:(N//3)*2]])
check_valid([ row[(N//3)*2:] for row in matrix[N//3:(N//3)*2]])
# 3x3중 3x3
check_valid([ row[:N//3] for row in matrix[(N//3)*2:]])
check_valid([ row[N//3:(N//3)*2] for row in matrix[(N//3)*2:]])
check_valid([ row[(N//3)*2:] for row in matrix[(N//3)*2:]])
else:
print("다 똑같다 통과, dict에 넣고 저장후 return True로 종료 matrix:", matrix)
count_dict.setdefault(paper_0_0, 0)
count_dict[paper_0_0] += 1
return True
count_dict = {}
check_valid(paper)
print(*map(lambda x:x[1], sorted(count_dict.items(), key=lambda x:x[0])))