개발/python

[백준 1181번] 단어 정렬 - python

dotudy 2025. 8. 13. 23:43

https://www.acmicpc.net/problem/1181

📌 문제 탐색하기

  1. 길이가 짧은 단어부터 출력
  2. 길이가 같으면 사전 순으로 출력
  3. 중복된 단어는 제거하기

📌 코드 설계하기

  • 총 단어 개수 입력을 받고 for문을 돌면서 단어를 받을 예정이다. 다만, 단어를 받으면서 정렬을 진행할까 고민된다. 그렇게되면 배열보다는 linked list가 편할거같고.. 근데 여기서 연결리스트는 너무 과하지 않나..?라는 생각이 든다.
  • 차라리 단어를 다 받아서 파이썬 내장 함수인 lambda로 짧은 단어와 사전 순 정렬을 한 번에 처리해버리자.
  • 이제 중복된 단어만 제거하는 로직만 짜면 된다. for문 두 개 돌면서 다음 index의 값과 다르면 추가하면 되지 않나?
  • → 알고보니 이렇게 되면 마지막에 같은게 두 개 있으면 값이 저장이 안 된다.

📌 Trouble Shooting

  1. for 문에서 index값 수정하기이런식으로 if문에 들어왔을 때 같은 값을 가진 index만큼 이동을 한 후 i 값을 업데이트해주려고 했다. 근데 print(i)를 해보니 원본 0, 1, 2, 3… 을 진행했다. C++을 주언어로 사용했던터라 당연히 될 줄 알았는데 python에서는 해당 기능을 지원하지 않는다고 않다. ㅜㅜ while문으로 수정해야하나.?
  2. for i in range (len(arr)-1): print(i) for j in range(i+1, len(arr)): if arr[i] != arr[j]: result.append(arr[i]) i = j+1 break

📌 정답 코드

n = int(input())
arr = []
for i in range (n):
    arr.append(input())

arr.sort(key = lambda x:(len(x), x))

result = []
i = 0
flag = True
while flag == True:
    if i == len(arr)-1:
        result.append(arr[i])
        flag = False
        break
    for j in range(i+1, len(arr)):
        if arr[i] != arr[j]:
            result.append(arr[i])
            i = j
            break
        else:
            i+=1

for i in range (len(result)):
    print(result[i])