10817번 - 세 수
a=input().split()a.sort()list(map(int,a))
print(a[1])
이건 안되는데
a=input().split()list(map(int,a))
a.sort()
이건 되는 이유가 있나요?
sort 먼저하고 하나 map 쓰고 하나 같지 않나요?
지금 쓰신 코드에서는 list(map(int, a)) 가 아무 의미가 없어요.
a = list(map(int, a)) 를 해주셔야 int로 맵핑된 결과가 나옵니다.
따라서 현재 a.sort() 는 string으로 정렬한 결과가 나오겠죠.
첫 번째는 문자 우선 순위(ASCII 코드)를 체크하여 문자열 리스트를 정렬하는 방식이고, 두 번째는 정수의 우선 순위를 체크하여 정수 리스트를 정렬하는 방식입니다.
첫 번째 코드는 9 10 1과 같은 데이터가 반례라고 할 수 있습니다. 원래는 9가 나와야하지만 첫 번째 코드에서는 10을 정답으로 제출합니다.
말 그대로 정렬 우선순위가 애매해지기 때문에 정렬 우선 순위를 다시 맞춰주시거나, 아니면 아래처럼 정수로 변환하여 사용하는 편이 옳습니다.
설명이 좀 부족한 것 같아서 덧 붙입니다.
python3 기준으로 map(func, list) 는 generator를 반환합니다.
그 결과에 list(결과) 와 같이 해줘서 결과적으로 각 인자에 func이 먹은 결과를 반환해주는 겁니다.
좀 더 요점을 찝어서 말하면 여기서 map은 원본 리스트인 a에 영향을 주지 않습니다. 쉽게 말해서 복사를 합니다.
한편 a.sort() 는 원본인 a를 바꿉니다.
댓글을 작성하려면 로그인해야 합니다.
cafemug 7년 전
a=input().split()
a.sort()
list(map(int,a))
print(a[1])
이건 안되는데
a=input().split()
list(map(int,a))
a.sort()
print(a[1])
이건 되는 이유가 있나요?
sort 먼저하고 하나 map 쓰고 하나 같지 않나요?