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 쓰고 하나 같지 않나요?

wooljs   7년 전

지금 쓰신 코드에서는 list(map(int, a)) 가 아무 의미가 없어요.

a = list(map(int, a)) 를 해주셔야 int로 맵핑된 결과가 나옵니다.

따라서 현재 a.sort() 는 string으로 정렬한 결과가 나오겠죠. 

gallopsys   7년 전

첫 번째는 문자 우선 순위(ASCII 코드)를 체크하여 문자열 리스트를 정렬하는 방식이고, 두 번째는 정수의 우선 순위를 체크하여 정수 리스트를 정렬하는 방식입니다.


첫 번째 코드는 9 10 1과 같은 데이터가 반례라고 할 수 있습니다. 원래는 9가 나와야하지만 첫 번째 코드에서는 10을 정답으로 제출합니다.

말 그대로 정렬 우선순위가 애매해지기 때문에 정렬 우선 순위를 다시 맞춰주시거나, 아니면 아래처럼 정수로 변환하여 사용하는 편이 옳습니다.

wooljs   7년 전

설명이 좀 부족한 것 같아서 덧 붙입니다.

python3 기준으로 map(func, list) 는 generator를 반환합니다. 

그 결과에 list(결과) 와 같이 해줘서 결과적으로 각 인자에 func이 먹은 결과를 반환해주는 겁니다. 

좀 더 요점을 찝어서 말하면 여기서 map은 원본 리스트인 a에 영향을 주지 않습니다. 쉽게 말해서 복사를 합니다.

한편 a.sort() 는 원본인 a를 바꿉니다.

댓글을 작성하려면 로그인해야 합니다.