ny2485   2년 전

set으로 중복제거, 리스트화후에 정렬(key=len)

까지했고 vscode로는 실행이 잘 되는데 어느 제가 생각못하는 예외가 있는것 같아요.

백준에서는 틀렸다고만 나오는데 도대체 문제가 무엇인지 도움  좀 요청드려도 될까요? ㅜㅜ 부탁드리겠습니다!

kckc0608   2년 전

1. sys.stdin.readline 은 input내장함수와 달리 개행문자까지 입력을 받습니다. rstrip()을 해주셔야합니다.

2. 현재 정렬 기준을 길이로만 잡으셨는데, 길이가 같은 경우 사전순 정렬이 빠져있습니다. 정렬 기준을 길이로만 넣으면 길이가 같은 경우 사전순으로 알아서 정렬해주지 않고 리스트에 들어있는 그대로 놔둡니다.

ny2485   2년 전

대박 감사합니다. 저 하나만 더 질문드려도 될까요??

b.sort() #1번

  b.sort(key=len).  #2번


로하면 답이 출력되는데 저걸 반대로 뒤집으면 왜 안되는지가 궁금합니다.

1번->2번은 정렬을 우선하고 길이를 맞추는거고

2->1번은 길이를 우선맞추고 정렬을 하는건데 


1번은 유지가되고 왜 2->1로할때 2번은 유지가 안되는지가 궁금해요 ㅠ 

무슨개념이 부족한 걸까요?

kckc0608   2년 전

위에 댓글에 적은 것과 같은 이유입니다. len 조건으로만 정렬하면 길이를 기준으로 정렬하고, 사전순과 같은 길이 외 조건으로는 정렬을 수행하지 않습니다. (그냥 넘어가버림)

사전순 정렬 후 길이로 정렬하면, 길이가 같을 때 아무런 정렬을 하지 않을 텐데, 어차피 이미 사전순으로 정렬이 되어 있기 때문에 길이가 같을 때는 정렬을 하지 않아도 문제 조건에서 2번 조건을 알아서 만족하게 됩니다.

하지만 반대로 문제에서 요구하는대로, 길이가 짧은 대로 정렬을 먼저하고, 나중에 다시 사전순으로 "다시" 정렬을 하게되면, 기존에 길이순으로 정렬된 그 순서가 꼬이면서 의미가 없어집니다.

cab abcd 과 깉이 기껏 길이순으로 정렬해뒀는데, "다시" 사전순으로 정렬을 하면 

abcd cab가 되어버리니 길이가 짧은 것을 우선한다는 첫번째 조건이 덮어지면서 만족이 안됩니다.

최대한 말로 풀어서 설명하려고 해보았는데 혹시 이해가 되셨을지 모르겠네요

제일 좋은 것은 직접 내가 컴퓨터다 생각하고 정렬하는 과정을 한단계씩 따라가보면 더 이해가 잘 되실 것 같습니다.

cab bcd abcd 를 사전순 정렬 -> 길이순 정렬 해보시고, 다시 길이순 -> 사전순 정렬해보세요 ㅎㅎ

ny2485   2년 전

네 이것때문에 sort와 key에대해 많이 생각해보게되었어요ㅠ 또 답도 달아주시고 감사합니다!

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