반응형
n = int(input())
bulbs = list(map(int,input().split()))
student = []
student_num = int(input())
for i in range(student_num):
  student.append(list(map(int,input().split())))

for order in student:
  if order[0] ==1:
    rest = n//order[1]

    for i in range(1,rest+1):
      bulbs[order[1]*i - 1 ] = (bulbs[order[1]*i - 1 ] * -1) +1
  
  if order[0] ==2:
    limit_of_wing = min(order[1]-1, n-order[1] )
    change_range = limit_of_wing

    for j in range(1, limit_of_wing +1 ):
      if bulbs[order[1]-j-1 ] ==bulbs[order[1]+j-1]:
        pass
      else:
        change_range = j-1
        break

  
    for jj in range(2*change_range +1):
      bulbs[order[1]-change_range +jj-1 ] = (bulbs[order[1]-change_range +jj-1 ] * -1) +1

for bulb_index in range(n):
  if (bulb_index+1) %10 == 0:
    print(bulbs[bulb_index], sep="\n")
  else:
    print(bulbs[bulb_index],end=" ")
반응형

'computer 지식 > 알고리즘 정복기' 카테고리의 다른 글

4396 지뢰찾기 백준 파이썬  (0) 2021.10.13
12933 오리 백준 파이썬  (0) 2021.10.13
백준 1212 파이썬  (0) 2021.10.11
백준 2753번 파이썬  (0) 2021.10.11
백준 상어초등학교 21608 파이썬  (0) 2021.10.11
반응형
n = int(input())

answer= 0 
array = [[0 for col in range(n+2)] for row in range(n+2)]

array[0] = [-1 for col in range(n+1)]
array[-1] = [-1 for col in range(n+1)]
for cols in array:
  cols[0] = -1
  cols[-1] = -1

rules = []
rules2 = {}
for i in range(n**2):
  rules.append(list(map(int,input().split())))
  rules2[rules[-1][0]] = rules[-1][1:]

for order in rules:
  student_num = order[0]
  temp_max = 0 
  temp_list= []
  for j in range(1,n+1):
    for k in range(1,n+1):
      if array[j][k] != 0:
        continue
      temp = 0
      if array[j+1][k] in order:
        temp +=1
      if array[j][k+1] in order:
        temp +=1
      if array[j-1][k] in order:
        temp +=1
      if array[j][k-1] in order:
        temp +=1

      if temp == temp_max:
        temp_list.append((j,k))
      if temp > temp_max:
        temp_max = temp
        temp_list=[(j,k)]


  #1번규칙
  # print(order)

  if len(temp_list) == 1:
    j,k = temp_list[0]
    array[j][k] = student_num
    # print(array)
    continue
  
  #2번 규칙
  temp_max2 = 0 
  temp_list2 = []

  for temp_locate in temp_list:
    j2,k2 = temp_locate
    temp2 = 0
    if array[j2+1][k2] ==0:
      temp2 +=1
    if array[j2][k2+1] ==0:
      temp2 +=1
    if array[j2-1][k2] ==0:
      temp2 +=1
    if array[j2][k2-1] ==0:
      temp2 +=1
    
    if temp2 == temp_max2:
      temp_list2.append((j2,k2))
    if temp2 > temp_max2:
      temp_max2 = temp2
      temp_list2=[(j2,k2)]

  if len(temp_list2) == 1:
    j3,k3 = temp_list2[0]
    array[j3][k3] = student_num
    # print(array)
    continue
  temp_list2.sort()
  j3,k3 = temp_list2[0]
  array[j3][k3] = student_num
  
for j4 in range(1,n+1):
  for k4 in range(1,n+1):
    target = array[j4][k4]
    temp3 = 0
    if array[j4+1][k4] in rules2[target]:
      temp3 +=1
    if array[j4][k4+1] in rules2[target]:
      temp3 +=1
    if array[j4-1][k4] in rules2[target]:
      temp3 +=1
    if array[j4][k4-1] in rules2[target]:
      temp3 +=1
    
    if temp3 ==1:
      answer +=1
    if temp3 ==2:
      answer += 10
    if temp3 ==3:
      answer += 100
    if temp3 ==4:
      answer += 1000

print(answer)

https://www.acmicpc.net/problem/21608

반응형

'computer 지식 > 알고리즘 정복기' 카테고리의 다른 글

1244 스위치 켜고 끄기 백준 파이썬  (0) 2021.10.13
백준 1212 파이썬  (0) 2021.10.11
백준 2753번 파이썬  (0) 2021.10.11
백준 2501번  (0) 2021.10.10
이 카테고리에 관하여  (0) 2021.10.10
반응형

https://seoyeonhwng.medium.com/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EB%82%B4%EB%B6%80-%EA%B5%AC%EC%A1%B0-f04847b58286

 

파이썬 리스트 내부 구조

C언어의 배열과 파이썬의 리스트는 같은 자료형이지만 파이썬의 리스트가 훨씬 사용하기 편리하다. 그 이유는 아래와 같다.

seoyeonhwng.medium.com

 

파이썬 리스트를 구현해본 것을 까보면, 이중pointer로 되어있어서 그렇다.

쉡게 말하면 파이썬의 리스트는 원소의 주소값을 저장한다.

반응형

'computer 지식 > 파이썬' 카테고리의 다른 글

django 4.0 release!  (0) 2021.12.08

+ Recent posts