본문 바로가기
  • Top Genius in the world
알고리듬

[알고리듬] #26 매핑과 집합

by Mr.Algo 2024. 3. 29.
728x90
반응형

파이썬 실습창을 열 수 있습니다.실습창 열기

 

아무 생각없이,

그냥 하자!

계속 가는 거다.

 

 

1. 매핑(mapping) 범주

매핑 범주에는 dict type(사전 형, 딕셔너리 타입)이 있습니다.

  • dict type의 모습은 {key1:value1, key2:value2, key3:value3, ...}와 같습니다.
  • key value 쌍들이 {}(brace)로 둘러싸이고, 각각의 요소는 key:value 형태이며, 코머(,)로 구분되어 있습니다.
  • 값의 대응 관계를 표시하여 임의의 key 값으로 value를 찾습니다.
  • sequence와 다르게 순서가 없습니다.
  • 변경 가능합니다(mutable).
번호 설명
1 ascii={65:'A',66:'B',67:'C'}
print(ascii[66])
key65, 66, 67이며 대응되는 value'A','B','C' 이다.
==> 'B' 출력
2 person={
'name':'Hong',
'age' :27,
'cell':'01088889999'
}
print(person['age'])

person['age']=19
print(person)
key‘name', 'age', 'cell'이다.
key숫자, tuple등도 사용할 수 있다.
그러나 list, dict 등과 같이 내용이 바뀔 수 있는
object는 사용할 수 없다.

==> 27 출력

'age'의 값이 19로 바뀜
3 v={}
v=dict()
dict를 만든다. 둘 다 같다. (blank dict)

 

2. set(셑) 범주

set 범주에는 set 타입과 frozenset 타입이 있습니다.

  • set은 고유한 항목들(중복 없음)의 순서 없는 모임입니다. 
  • set은 변경이 가능한 집합이고, frozenset은 변경이 불가능한 집합입니다.
  • set type은 {} (brace)으로 둘러쌉니다. {}로 둘러 싼 것은 dict와 같지만 item에 :(colon)이 없습니다.
  • 집합의 모습입니다. s = {1, 3, 5, 7, 9},  f = frozenset({2, 'a', 'b', 4, 6}) 
  • v = set() 또는 v = set({})은 공집합입니다.

다음 표는 set형 오브젝트의 연산(집합연산)입니다.

분석, 이해, 실습하세요.

번호 연산 출력 설명
1 형변환 a='hello'
b=set(a)
print(b)
{'h', 'e', 'l', 'o'} set형은 중복이 제거된다.
출력의 순서가 바뀔 수 있다(순서 없음).
2 a=s | t
b=s & t
c=s - t
d=s ^ t
s={1, 3, 5, 7}
t={2, 3, 7}
a=s | t
b=s & t
c=s - t
d=s ^ t
print(a,b,c,d)
{1, 2, 3, 5, 7}
{3, 7}
{1, 5}
{1, 2, 5}
합집합
교집합
차집합
대칭 차집합(한쪽에만 있는 항목)

|(수직선 기호)는 보통 엔터키 위에 있다.
3 len(s)
max(s)
min(s)
s={1, 3, 5, 7}
a=len(s)
b=max(s)

c=min(s)
print(a)
print(b)

print(c)
4
7
1

s의 항목 개수를 반환한다.
s의 최대값 항목을 반환한다.
s의 최소값 항목을 반환한다.

  • 합집합(union): 모든 item을 한 군데 합쳐놓은 집합
  • 교집합(intersection): 공통으로 포함하는 item 으로 이루어진 집합
  • 차집합(set difference): A는, B의 원소 중 A의 원소가 아닌 것들의 집합
  • 대칭 차집합(symmetric difference): 둘 중 한 집합에는 속하지만 둘 모두에는 속하지는 않는 원소들의 집합

3. 문제 해결

3-1. 비밀번호 찾기

다음 표는 아이디와 비빌번호를 정리한 것입니다.

아이디를 입력하면 비밀번호를 출력하는 프로그램을 작성하려고 합니다.

?부분을 완성하여 주세요.

아이디(ID) 비밀번호(PW)
kim135 77@2
park777 888#3
jung987 a&b*55
table={
  'kim135':'77@2',
  'park777':'888#3',
  'jung987':'a&b*55'
}

id=input('ID?')
pw=???????
print(pw)

 

더보기
table={
  'kim135':'77@2',
  'park777':'888#3',
  'jung987':'a&b*55'
}

id=input('ID?')
pw=table[id]
print(pw)

'''
dict의 item을 간단히 입력하는 방법도 있습니다.

table=dict(kim135='77@2',park777='888#3',jung987='a&b*55')
id=input('ID?')
pw=table[id]
print(pw)

'''

 

3-2. 공통으로 있는 문자

우연히 알게 된 문장 하나가 마음에 울림을 주기도 하고,

얽매여 있던 문제를 새롭게 바라볼 수 있게도 합니다.

 

The die is cast.  주사위는 던져졌다. (줄리어스 시저)

This too shall pass. 이또한 지나가리라. (에트 혹 트란시비트)

 

위의 두 문장에서 공통으로 있는 문자는 무엇일까요?

대문자와 소문자는 다른 것으로 생각합니다.

다음 프로그램을 완성하세요.

a='The die is cast'
b='This too shall pass'

 

더보기
a='The die is cast'
b='This too shall pass'
r=set(a) & set(b)
print(r)

'''
{'a', 'h', 't', 'i', 's', ' ', 'T', '.'}
공백과 마침표까지 8문자가 공통으로 있습니다.
'''

수고하셨습니다.

오늘 끝.

 

728x90
반응형