db2011307   1년 전

어느 부분이 잘못되었나요? 코드에서 잘못된 부분을 못찾겠는데 원하는 답이 안나오네요.

kdhc7777   1년 전

num_list를 입력받으실때 int형이 아닌 str(문자열)로 받으셨네요. 이때 정렬을 하게되면 첫번째 예제의 경우

['50000', '5000', '500', '50', '5', '10000', '1000', '100', '10', '1'] 이렇게 정렬이 됩니다. 처음부터 int형으로 값을 입력받으면 좋을꺼같아요.

junyub2   1년 전

sort 하는 과정에서 문제가 발생합니다

3번줄 이후에 num_list가 [ '50000', '5000', '500', ... '10000', '1000', '100', ... '1' ] 이렇게 나오는데

이거는 '5'의 아스키코드 값이 53이고 '1'의 아스키코드 값이 49라서 문제가 발생한것 같습니다

쉽게말하면 문자를 sort할때랑 int를 sort할때는 결과값이 다르게 나옵니다.

본인이 생각한것처럼 결과가 나오지 않을때는

중간중간 print해서 본인이 예상한 결과가 나오는지 확인하는 습관 들이시면 좋습니다

3번줄 이후에 print(num_list) 해보시고

int형으로 받은 이후에 sort한거를 다시한번 print해서 비교해보시면 왜 틀렸는지 쉽게 감을 잡으실 수 있을것 같습니다.

junyub2   1년 전

추가로 모든 문자에는 고유한 값인 아스키코드 값이 있는데

print(ord('1')) 이런식으로 확인할 수 있습니다.

['11' , '100'] 를 sort하는 경우엔

각 문자의 왼쪽부터 아스키코드 값을 확인하기 때문에

'11'의 첫째자리인 '1'이 49 이고, '100'의 첫째자리인 '1'도 역시 49 이기때문에

그 다음자리인 '1'과 '0'을 비교해서 아스키코드 값이 48인 '0'이 더 작다고 판단해서

['100', '11'] 과 같이 sort가 됩니다

db2011307   1년 전

num_list를 문자형으로 받아서 문제가 발생한 거군요. 문제가 발생할 떄 코드에 print문을 넣는 습관도 기를려고 합니다. 도움주셔서 감사합니다.

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