사전 자료형이나 집합자료형 (dict(), set([])은 순서가 존재하지 않기 때문에, 인덱싱 및 슬라이싱이 불가능)
list or tuple은 순서가 존재하기 때문에, 인덱싱 및 슬라이싱이 가능)
 
 
1. 사전 자료형 
1) data=dict() 로 초기화해야 함
2) keys()와 values()로 구성됨
3) key와 value 모두 값을 기반으로 하는 것이지, 0, 1 등의 위치를 기반으로 하지 않는다. 그래서 value값을 찾으려면 key의 string을 넣는다...
4) data만 구별자로 넣을 경우, 이는 key값으로 봐야 함
 
data=dict()
 
data['사과']='apple'
data['바나나']='banana'
data['멜론']='melon'
 
print(data)
print('keys : ', data.keys())
print('values : ', data.values())
print('items : ', data.items())
print('data : ', data['바나나'])
print('data[0] : ', data.values['melon'])
 
for i in data:
  print(data[i])
 
2. 집합자료형
1) 중복 및 순서 없음
2) set([]) 또는 {}로 초기화 함
3) data.add는 하나의 원소만 입력 가능
4) data.update는 한개 이상의 원소를 입력 가능함. 단 []안에 넣어야만 함
5) data.remove는 하나의 원소만 가능함. 만약 없는 원소이면 에러나옴
 
d = set([0, 1, 1, 2, 3, 4, 5, 6, 7])
print(d)
d.add(8)
print(d)
d.add(9)  #([9]) 안됨
print(d)
d.add(10)  #(10,11) add는 하나의 원소만 가능함
print(d)
d.update([11])  #(11) update는 일반 원소로는 불가 []안에 데이터를 넣어야만 함
print(d)
d.update([13, 14])
print(d)
d.update(13) #([13]), ([13,14]), (13,14) remove는 하나의 원소만 가능함
print(d)
 
0. tuple
1) 특징은 값을 변경 불가. 메모리 최적화 등의 장점이 있어서....
2) 노드의 경로를 처음에 넣어 주거나 ex) graph, 암호값(hashing)값을 쓸때 유용함 ==> 값이 변경이 안되기 때문
3) 메모리 최적화에 좋음.......
==> 그런데, 노드 경로 외로는 사용할 이유가 있는지는 잘 모르겠음.....
"""
case 1 (정석)
특정의 여러 원소 제거하기
"""
 
#arr = [0, 1, 2, 3, 3, 5, 3, 7, 8, 9, 3, 9]
arr = ['0', '1', '2', '3', '3', '5', '3', '7', '8', '9', '3', '9', 'q', 'a']
remove_set = ('3', '9', 'a')  #집합자료형
 
res = [i for i in arr if i not in remove_set]
 
print(res)
 
 
"""
case 2 
1) arr에 숫자(int)만 있을 경우는 
len(arr)만큼 for로 remove로 계속 돌린다.
2) arr에 string 만 있을 경우는
문자열을 ascii code 변환 후, 계산하고, 다시 문자열로 변경
찾을 값을 ord(str)로 변경하고, for로 ord 값을 변경후, 찾고, 다시 for로 chr(int)로 변경하여 출력함
 
 
"""
"""
a = ord('a')
#print(ord('3'))
#arr=[0,1,2,3,3,5,3,7,8,9,3]
arr = ['0', '1', '2', '3', '3', '5', '3', '7', '8', '9', '3', 'q', 'a']
arr1 = [0] * len(arr)
 
for i in range(len(arr)):
  arr[i] = ord(arr[i])
#  arr1.append(int(arr[i]))
 
print(arr)
#print(arr1)
#print(arr1, 'len=', len(arr1))
 
print('count=', arr.count(a))
 
for _ in range(arr.count(a)):  #range(len(arr)):
  arr.remove(a)
 
for i in range(len(arr)):
  arr[i] = chr(arr[i])
 
print(arr, 'len=', len(arr))
"""

o DFS 유형

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

 

graph = []

for i in range(n):

 graph.append(list(map(int, input())))

 

res = 0

 

dx = [0, 0, -1, 1]

dy = [1, -1, 0, 0]

 

def dfs(x, y):

  if(x <= -1 or x >= n or y <= -1 or y >= m):

   return False

 

  ifgraph[x][y] == 0:

   graph[x][y] = 1

 

   for i in range(4):

     dfs(x+dx[i],y+dy[i])

   return True

 

 return False

 

for i in range(n):

 for j in range(m):

   if dfs(i, j) == True:

     res += 1

 

print(res)

 

예제) 4 5

00110

00011

11111

00000  

 #3

o BFS

 

from collections import deque

 

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

graph = []

for i in range(n):

 graph.append(list(map(int, input())))

 

dx = [0, 0, -1, 1] #상하좌우 순서임 x라서 좌우만

dy = [1, -1, 0, 0]

 

def BFS(x, y):

 queue = deque()

 queue.append((x, y))

 

 while queue:

   x, y = queue.popleft()

 

   for i in range(4):

     nx = x + dx[i]

     ny = y + dy[i]

 

     if (nx < 0 or ny < 0 or nx >= n or ny >= m):

       continue

 

     if (graph[nx][ny] == 0):

       continue

 

 

     if (graph[nx][ny] == 1):

       graph[nx][ny] = graph[x][y] + 1

       queue.append((nx, ny))

 return graph[n - 1][m - 1]

print(BFS(0, 0)) # 10

 

ex) 5 6

101010

111111

000011

111111

111111

import math

 
res0=math.factorial(5) -->120 : factorial
res1=math.gcd(10,5,100) --> 5 : 최대 공약수
res2=math.lcm(10,5,100) --> 100 : 최소 공배수
 
res3=math.ceil(2.2) -> 3 : 올림
      math.ceil(2.0) -> 2
res4=math.floor(2.7) -> 2 : 내림
      math.floor(-3.2) -> -4
 
res5=math.pow(2,4) -> 2의 4승 = 16
res7=math.sqrt(16) -> 4

- ValueError

 
- IndexError --> Out-of-range인 경우로 대부분 초기화하면 됨
a=[0]*(n+1)
 
- SyntaxError
 
- NameError
 
- ZeroDivisionError
 
- TypeError
 
- AttributeError
 
- KeyError -> Dict에서 Key 없음

+ Recent posts