728x90
문제
로그를 재정렬하라. 기준은 다음과 같다.
- 로그의 가장 앞 부분은 식별자다.
- 문자로 구성된 로그가 숫자 로그보다 앞에 온다.
- 식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다.
- 숫자 로그는 입력 순서대로 한다.
예제1
입력
logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]
출력
["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]
풀이1 풀이 방법은 람다와 '+' 연산자를 이용하기
이 문제는 요구 조건을 얼마나 깔끔하게 처리할 수 있는지를 묻는 문제다.
먼저, 문자로 구성된 로그가 숫자 로그보다 이전에 오며, 숫자 로그는 입력 순서대로 둔다. 그렇다면 문자와 숫자를 구분하고, 숫자는 나중에 그대로 이어 붙이면 된다. 로그 자체는 숫자 로그도 모두 문자열로 지정되어 있으므로, 타입을 확인하면 모두 문자로 출력된다.
따라서 isdigit( ) 함수를 이용해서 숫자인지를 판별해 구분한다.
그 후에는 식별자를 제외한 문자열[1:]을 키로 하여 정렬하며, 문자가 동일할 경우 후순위로 식별자순으로 정렬되도록 람다 표현식을 이용해 정렬한다. 그리고 letters와 digits를 모두 붙여 다음과 같이 리턴한다.
return letters + digits
전체 코드는 다음과 같다.
# input: logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]
# output: ["let1 art can","let3 art zero","let2 own kit dig","dig1 8 1 5 1","dig2 3 6"]
def solution(logs: list[str]) -> list[str]:
letters, digits = [], []
for log in logs:
if log.split()[1].isdigit():
digits.append(log)
else:
letters.append(log)
# 2개의 키를 람다 표현식으로 정렬
letters.sort(key=lambda x: (x.split()[1], x.split()[0]))
return letters + digits
logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]
print(solution(logs))
알게된 점
isdigit( ) 함수로 숫자 여부 구분
split( ) 함수로 문자열을 리스트로 변환하여 표현하는 방법
람다 표현식으로 정렬 우선순위에 따라 정렬하는 방법
공부할 것
람다 표현식의 쓰임
split( ) 함수의 사용 방법
728x90
'알고리즘 문제 풀이' 카테고리의 다른 글
[알고리즘 문제 풀이] 가장 긴 팰린드롬 부분 문자열 (0) | 2022.08.24 |
---|---|
[알고리즘 문제 풀이] 그룹 애너그램 (0) | 2022.08.19 |
[알고리즘 문제 풀이] 가장 흔한 단어 (0) | 2022.08.19 |
[알고리즘 문제 풀이] 문자열 뒤집기 (0) | 2022.08.12 |
[알고리즘 문제 풀이] 유효한 팰린드롬 (0) | 2022.08.12 |