sooleeandtomas

[day16] 코딩테스트 알고리즘 - lv.2 해시 (위장) python (feat.map) 본문

코딩테스트 알고리즘/해시

[day16] 코딩테스트 알고리즘 - lv.2 해시 (위장) python (feat.map)

sooleeandtomas 2022. 10. 12. 02:09

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

Hash는 이름은 어렵게 생겼지만, 참 쉽다.

key와 value로 이루어진 Dictionary이다.

{
	headGear: headGear의 개수,
	eyeWear:eyeWear의 개수
}

 

위와 같은 형태의 dictionary를 만들어주면 된다.

 

그리고 준비물은 아래 두가지이다.

 

1) 경우의 수를 구하는 법 

= a의 경우의 수  * b의 경우의 수 

 

2) "안 입은 경우" 추가하고 제외하기.

각 타입에 관해서는 안 입는 것은 추가해야 하고,

최종적으로 모든 타입을 안입었을 경우는 제외해야 한다.

 

참고 코드

def solution(clothes):
  answer = 1
  map = {}
  for index, type in clothes:    
    map[type] = map.get(type, 1) + 1
    #map에서.get(type)을 할 수 있다. 값이 없으면 1을 default로 가져올 수 있다.
    #입지않는 케이스를 고려해서 1을 default값으로 지정
    
  for type in map:
    answer *= map[type]
    #경우의 수를 구한다. -> a경우의 수 * b경우의 수 * c경우의 수를 하면됨
  return answer -1 
  #아무것도 입지 않은 경우를 고려함 (문제의 조건에 "스파이는 하루에 최소 한 개의 의상은 입습니다."라고 나와있음)
  
 solution([["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"]])

python for문 문법

arr = [['a','a1'], ['b', 'b1'], ['c', 'c1']]

for j, k in arr:
	print(j,k)
    #a a1
    #b b1
    #c c1

 

python map 문법

get을 활용해서 값을 가져올 수 있다. 값이 없다면 default도 지정해줄 수 있다.

map = {'a':1, 'b':2, 'c':3}

map.get('a', 1)
# 1

map.get('b', 1)
# 2

map.get('d', 1)
# 1

 

Comments