본문 바로가기

카테고리 없음

파이썬 문제해결 기본 LIST

n,m =map(int,input().split())

#1
mylist= [0 for _ in range(n)]
for i in range(n) : mylist[i] = list(map(int,input().split()))

#2
mylist= []
for i in range(n): mylist.append(list(map(int,input().split())))

#3
mylist=[list(map(int,input().split()))for _ in range(n)]

# 원하는 데이터 위치 찾기
#1 들어있는 데이터를 찾고싶어요!
n,m = map(int,input().split())
mylist = [0 for _ in range(n)]
newlist= []

for i in range(n):
    mylist[i] = list(map(int,input().split()))
    for j in range(m):
        if mylist[i][j] == 1:
            newlist.append([i,j])
           
#2 더 간단하게는요
n, m = map(int,input().split())
mylist=[list(map(int,input().split())) for _ in range(n)]
newlist=[ (i,j) for i in range(n) for j in range(m) if mylist[i][j]==1]

#리스트 순회하기
#행 우선 순회
for i in range(len(arr)):
    for j in range(len(arr[i])):
        arr[i][j]
       
#열 우선 순회
for j in range(len(arr[0])):
    for i in range(len(arr)):
        arr[i][j]
       
#지그재그 순회

for i in range(len(arr)):
    for j in range(len(arr[0])):
        arr[i][j+(m-1-2*j)*(i%2)]
        #자세히 설명하면 i가 짝수행일때는 그냥 j로 순서대로 계산
        #i가 홀수일때는 j+m-1-2*j = m-1-j가 됨.
        # m-1부터 m-2, m-3..이런식으로 줄어드는 방식이 된다는걸 알 수 있음
       
#델타 이용 2차 list 탐색
#네 방향의 인접list요소를 탐색할 때 사용하는 방법
#델타 값은 한 좌표에서 네 방향의 좌표와 x,y의 차이를 저장한 list로 구현
#index 범위 잘 제한해서 사용해야함
#델타값 이용해서 특정 원소 상하좌우에 위치한 원소를 저장할 수 있음.

#전치행렬
#모든 좌표에 대해 행 열 값을 바꾸면 본래 행렬이 되니까 주의
arr = [[1,2,3],[4,5,6],[7,8,9]]

for i in range(3):
    for j in range(3):
        if i<j:
            arr[i][j], arr[j][i] = arr[j][i], arr[i][j]
           
# zip(interable*)이란 것이 있음
# :동일한 개수로 이루어진 자료형들을 묶어주는 역할을 하는 함수

alpha = ['a','b','c']
index = [1,2,3]
alph_index = list(zip(alpha,index))
print(alph_index) #[('a',1),('b',2),('c',3)]

arr [[1,2,3],[4,5,6],[7,8,9]]
print(list(zip(*arr)))
# 1 2 3
# 4 5 6
#  7 8 9
#  [(1,4,7),(2,5,8),(3,6,9)]

 

 


#4836 [파이썬 S/W 문제해결 기본] 2일차 - 색칠하기

T = int(input())
for test_case in range(1,T+1):
   
   
    N = int(input().split())
    newlist = [0 for _ in range(10)]*10
    count=0
    for _ in range(N):
        arr = list(map(int,input().split())) #r1,c1,r2,c2,color
        for i in range(arr[2]-arr[0]+1):
            for j in range(arr[3]-arr[1]+1):
                newlist[i][j] += arr[4]
    for i in range(10):
        for j in range(10):
            if newlist[i][j] ==3:
                count+=1
               
print(f'#{test_case} {count}')

 

- 처음 코드였는데, 문제를 똑바로 안읽어서 임의로 10x10 배열로 했는데 진짜 그거였어서 운이 좋았음 ㅋ 

근데 와중에 코드 틀리게 썼다.

 

- 접근자체는 좋았으나, index가 0부터 시작한다는 점을 반영해주어야함.여기서는 좌표값 그대로 주어졌음.

- 합이 3 일때 count 세는건 좋음. 근데 for문을 또 작성할 필요는 없다.

- 변수 5개를 나란히 입력받을 때 꼭 list를 쓰지않고 r1,r2,c1,c2,color = 이런꼴로 하고 split()하면 다 들어간다.

 

멍청한 좌식

#최종코드

T = int(input())
for test_case in range(1,T+1):
   
   
    N = int(input())
    arr = [[0 for _ in range(10)]for _ in range(10)]
    count=0
    for _ in range(N):
               
        r1,c1,r2,c2,color = map(int,input().split())
        for i in range(r1,r2+1):
            for j in range(c1,c2+1):
                arr[i][j] += color
                if arr[i][j] == 3:
                    count+=1
               
               
    print(f'#{test_case} {count}')