https://www.acmicpc.net/problem/1181
📌 문제 탐색하기
- 길이가 짧은 단어부터 출력
- 길이가 같으면 사전 순으로 출력
- 중복된 단어는 제거하기
📌 코드 설계하기
- 총 단어 개수 입력을 받고 for문을 돌면서 단어를 받을 예정이다. 다만, 단어를 받으면서 정렬을 진행할까 고민된다. 그렇게되면 배열보다는 linked list가 편할거같고.. 근데 여기서 연결리스트는 너무 과하지 않나..?라는 생각이 든다.
- 차라리 단어를 다 받아서 파이썬 내장 함수인 lambda로 짧은 단어와 사전 순 정렬을 한 번에 처리해버리자.
- 이제 중복된 단어만 제거하는 로직만 짜면 된다. for문 두 개 돌면서 다음 index의 값과 다르면 추가하면 되지 않나?
- → 알고보니 이렇게 되면 마지막에 같은게 두 개 있으면 값이 저장이 안 된다.
📌 Trouble Shooting
- for 문에서 index값 수정하기이런식으로 if문에 들어왔을 때 같은 값을 가진 index만큼 이동을 한 후 i 값을 업데이트해주려고 했다. 근데 print(i)를 해보니 원본 0, 1, 2, 3… 을 진행했다. C++을 주언어로 사용했던터라 당연히 될 줄 알았는데 python에서는 해당 기능을 지원하지 않는다고 않다. ㅜㅜ while문으로 수정해야하나.?
- 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])
'개발 > python' 카테고리의 다른 글
[백준 25305번] 커트라인 - python (2) | 2025.08.15 |
---|---|
[백준 1181번] 단어 정렬 - python (3) | 2025.08.14 |
[백준 10814번] 나이순 정렬 - python (0) | 2025.08.12 |
[백준 2309번] 일곱 난쟁이 - python (1) | 2025.08.11 |
[백준 11659번] 구간 합 구하기 4 - python (0) | 2025.03.26 |