map... 매번 별 생각 없이 사용하다 문득 의문이 들었다
나는 python의 map을 기껏해야 int input 받을 때나 습관적으로 쓰고 말았지 이놈이 대체 무엇을 하는지에 대해서는 일말의 관심도 주지 않았기 때문이다
애초에 map이란 무엇일까
정이 들어서 그런가 슬슬 map에 대해 알아가고 싶어졌다
맵은 기본적으로 func
과 iterable 객체
를 받는다.
func는 우리가 아는 그 함수들이고, func의 매개변수에 iterable 객체의 원소를 순서대로 집어넣은 결과를 map 객체로 return하는 게 기본적인 map의 기능이다.
의식보다 무의식이 더 많이 사용한 map(int, _list)
는 _list 안의 원소를 int 형변환 시킨 map 객체를 return하라는 아주 간단한 구문이었다
list(map(int, input().split()))
형태로 쓴 이유는 map이 list가 아니라 map 객체를 반환하기 때문이었구나
이제야 이해가 됐다
map을 이해한 나는 가히 무적에 가깝다고 할 수 있다.
무적에 가까운 나는 완벽한 계획을 수립했다.
그것은 아래와 같다:
# 2566
nums = [list(map(int, input().split())) for _ in range(9)]
print(nums.index(max(map(max, nums))))
이거면 되겠지
Traceback (most recent call last):
File "C:\Users\admin\Desktop\개인 자료\Python\baek.py", line 4, in <module>
print(nums.index(max(map(max, nums))))
ValueError: 90 is not in list
그런데 그렇게 생각한 것은 나뿐이었다
# 2566
nums = [list(map(int, input().split())) for _ in range(9)]
maxs = list(map(max, nums))
M = max(maxs)
row = maxs.index(M)
col = nums[row].index(M)
print(f"{M}\n{row+1} {col+1}")
nums.index()는 nums를 일차원 배열 취급한다. [21, 77, 45, 35, 28, 75, 90, 76, 1]은 알아도 90은 모른다는 뜻이다.
그래서 각 행마다 max를 최초로 뽑은 시점의 index를 구해 row로 삼고 그 row 안에서 최댓값 M을 검색해 col을 얻었다.
maxs = map(max, nums)
에row = list(maxs).index(M)
로 조합하니 또 90이 없다고 한다. 그래서 그냥 maxs에서 list로 바꿔줬다.
맞았다
문제도 맞고 나도 맞았다
이게 브론즈3이라니 앞이 캄캄해진다...
나... 괜찮을까?!