걸림돌
- 조건들 (길이가 짧은 순, 중복 단어 1개 뺴고 삭제, 길이가 같으면 사전 순)을 어떻게 구현하는 과정에서 걸림
- -> 처음에는 배열로 문자들을 받아서 길이순으로 정렬만 했다가 틀림 → 집합을 사용하면 중복도 피할 수 있고 sorted()를 사용해서 정렬도 사용할 수 있겠다 싶었음
- 집합에서 조건들 때문에 사전순 정렬, 길이순 정렬 둘다 써야하는데 그것을 구현하는데 문제가 생김
- -> sorted_word = sorted(word, key=len)를 사용해서 길이순 정렬을 해보려고 했으나, 이렇게 하면 길이만 정렬되고 길이가 같은 단어들의 사전순 정렬이 되지 않음
- -> 그래서 찾아본 결과 sorted_word = sorted(word, key=lambda x: (len(x), x))를 이용하면 길이순 정렬과 사전순 정렬이 둘다 가능함
- -> sorted_word = sorted(word, key=len)를 사용해서 길이순 정렬을 해보려고 했으나, 이렇게 하면 길이만 정렬되고 길이가 같은 단어들의 사전순 정렬이 되지 않음
코드
N = int(input())
word = []
for _ in range (N):
word.append(input())
word.sort(key=len)
for i in word:
print(i)
위 코드는 단어들을 각각 배열의 인덱스에 저장해서 길이순으로 정렬한 후 인덱스 순으로 출력하는 코드이다.
하지만 이 코드는 다음의 오류가 있다
- 중복으로 입력받은 단어를 거를 수 없다
- 길이가 같은 단어일 경우 사전순으로 출력 할 수 없다
N = int(input())
word = set()
for _ in range (N):
word.add(input())
sorted_word = sorted(word, key=len)
for i in sorted_word:
print(i)
위 코드는 앞전 코드에서 수정을 걸친 코드이다
달라진 점
- 단어들을 배열로 입력받지 않고 집합으로 입력받는다
- sorted()를 이용해 길이순으로 정렬시킨다
하지만 위 코드도 오류가 있다
- 같은 길이의 단어일 경우 사전순으로 정렬을 해야하는데 위의 sorted()함수는 길이순으로 밖에 정렬을 해주지 않음
N = int(input())
word = set()
for _ in range (N):
word.add(input())
sorted_word = sorted(word, key=lambda x: (len(x), x))
for i in sorted_word:
print(i)
최종으로 제출한 코드이다
위 코드는 앞전 코드에서 sorted()함수를 고친 코드이다.
- 고친 점 -
- sorted(word, key=lambda x: (len(x), x))로 고쳐서 길이순, 사전순 정렬이 둘다 되도록 고침
해결~!!!~@~@~!@~@~@@
'BeakJoon > Python' 카테고리의 다른 글
[Python] 백준 1475번 방 번호 [S-V] (1) | 2023.11.09 |
---|---|
[Python] 백준 #2303번 : 숫자 게임 (S-V) (1) | 2023.11.09 |
[Python] 백준 #1316번 : 그룹 단어 체커 (S-V) (0) | 2023.11.08 |
[Python] 백준 #1402번 : 아무래도이문제는A번난이도인것같다 (1) | 2023.10.24 |
[Python] 백준 #4673 : 셀프 넘버 (0) | 2023.10.15 |