본문으로 바로가기

HackerRank Python Solution / Tuples

category Develop/hackerrank.com 2022. 1. 11. 23:51

 

 

Tuples

if __name__ == '__main__':
    n = int(raw_input())
    integer_list = map(int, raw_input().split())
    t = tuple(integer_list)
    print(hash(t))

입력한 숫자형 타입을 튜플 타입으로 변환한 후, 해시함수를 적용하는 코드이다.

 

 

해설

map함수, split함수, tuple타입, hash함수 사용법을 통해 문제를 해결할 수 있다.

 

map

>>> number1 = [1, 2, 3]
>>> number2 = [4, 5, 6]
>>> result = map(lambda x, y: x+y, number1, number2)
>>> list(result)
[5, 7, 9]

map은 입력받은 자료형의 각 요소를 함수(func)가 수행한 결과를 묶어서 돌려주는 함수이다.

사용방법
map(func, iter)

파라미터
· fun : 주어진 iterable의 각 요소를 매핑시키는 함수
· iter : 매핑될 iterable 

 

split

>>> 문자열 = 'abc def 12 3'
>>> 문자열.split()
['abc', 'def', '12', '3']

>>> 문자열2 = 'ab,c d,ef 1,2 3,'
>>> 문자열2.split(',')
['ab', 'c d', 'ef 1', '2 3', '']

split 함수는 문자열을 나눠주는 기능이 있다.
문자열.split()처럼 괄호 안이 공백인 경우 스페이스, 탭, 엔터 등을 기준으로 문자열을 나눠준다

사용방법
문자열.split(sep='구분자', maxsplit='구분횟수')

파라미터
· sep : 해당 구분자를 기준으로 분할
· maxsplit : 분할을 실행할 횟수 (*디폴트 값은 -1로 해당 문자열을 자를 수 있을때까지 실행)

 

tuple

>>> t1 = (1, 2, 3, 4)
>>> del t1[0]
TypeError: 'tuple' object doesn't support item deletion

튜플의 가장 큰 특징은 값이 변하지 않는 것이다. 이를 변경불가성(immutable)이라 한다.
만약에 값을 수정, 삭제 등을 하고 싶다면 리스트를 써야한다.
리스트는 대괄호 [ ]를 통해 묶고, 튜플은 소괄호 ( )를 사용한다. 튜플의 값들은 쉼표로 구분된다.

 

hash

>>> t1 = (1, 2, 3, 4)
>>> t = tuple(t1)
>>> hash(t)
590899387183067792

hash함수는 괄호 안에 있는 값에 대응되는 정수를 반환한다.

위 코드처럼 튜플이 해시함수를 통과하여 값을 반환하는 경우 'hashable object'라 한다.

hash함수는 자물쇠와 열쇠처럼 비교를 위해 사용된다. 같은 숫자면 같은 객체로 인식한다. 위 반환한 정수(열쇠)만 있으면 한 번에 비교할 수 있으므로 '연산능력'에서도 우위가 있다. 또한 한 개의 오브젝트에 한 개의 값만 대응하므로 일관성을 지니고 있다. 

데이터 변경이 가능한 자료형(list, dict, set)은 hashable하지 않다. 따라서 변경불가한 tuple은 hash함수와 잘 어울린다.