1. sys.stdin.readline 은 input내장함수와 달리 개행문자까지 입력을 받습니다. rstrip()을 해주셔야합니다.
2. 현재 정렬 기준을 길이로만 잡으셨는데, 길이가 같은 경우 사전순 정렬이 빠져있습니다. 정렬 기준을 길이로만 넣으면 길이가 같은 경우 사전순으로 알아서 정렬해주지 않고 리스트에 들어있는 그대로 놔둡니다.
1181번 - 단어 정렬
위에 댓글에 적은 것과 같은 이유입니다. len 조건으로만 정렬하면 길이를 기준으로만 정렬하고, 사전순과 같은 길이 외 조건으로는 정렬을 수행하지 않습니다. (그냥 넘어가버림)
사전순 정렬 후 길이로 정렬하면, 길이가 같을 때 아무런 정렬을 하지 않을 텐데, 어차피 이미 사전순으로 정렬이 되어 있기 때문에 길이가 같을 때는 정렬을 하지 않아도 문제 조건에서 2번 조건을 알아서 만족하게 됩니다.
하지만 반대로 문제에서 요구하는대로, 길이가 짧은 대로 정렬을 먼저하고, 나중에 다시 사전순으로 "다시" 정렬을 하게되면, 기존에 길이순으로 정렬된 그 순서가 꼬이면서 의미가 없어집니다.
cab abcd 과 깉이 기껏 길이순으로 정렬해뒀는데, "다시" 사전순으로 정렬을 하면
abcd cab가 되어버리니 길이가 짧은 것을 우선한다는 첫번째 조건이 덮어지면서 만족이 안됩니다.
최대한 말로 풀어서 설명하려고 해보았는데 혹시 이해가 되셨을지 모르겠네요
제일 좋은 것은 직접 내가 컴퓨터다 생각하고 정렬하는 과정을 한단계씩 따라가보면 더 이해가 잘 되실 것 같습니다.
cab bcd abcd 를 사전순 정렬 -> 길이순 정렬 해보시고, 다시 길이순 -> 사전순 정렬해보세요 ㅎㅎ
댓글을 작성하려면 로그인해야 합니다.
ny2485 2년 전
set으로 중복제거, 리스트화후에 정렬(key=len)
까지했고 vscode로는 실행이 잘 되는데 어느 제가 생각못하는 예외가 있는것 같아요.
백준에서는 틀렸다고만 나오는데 도대체 문제가 무엇인지 도움 좀 요청드려도 될까요? ㅜㅜ 부탁드리겠습니다!