알고리즘

3일차(2.17)

traveler_JH 2023. 2. 17. 17:45

937. Reorder Data in Log Files

의 배열이 제공 logs됩니다. 각 로그는 공백으로 구분된 문자열이며 첫 번째 단어는 식별자 입니다.

다음과 같은 두 가지 유형의 로그가 있습니다.

편지 로그: 모든 단어(식별자 제외)는 소문자 영어로 구성됩니다.

숫자 로그: 식별자를 제외한 모든 단어는 숫자로 구성됩니다.

다음과 같이 로그 순서를 변경합니다:

  • 문자 로그는 모든 숫자 로그 앞에 온다.
  • 문자 로그는 내용에 따라 사전순으로 정렬됩니다. 내용이 같으면 식별자를 기준으로 사전순으로 정렬합니다.
  • 숫자 로그는 상대적 순서를 유지합니다.

로그의 최종 순서를 반환합니다.

  • 예시
    입력: 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"]
    설명:
    레터로그 내용이 다 다르기 때문에 순서는 "아트캔", "아트제로", "자체키트디그" 입니다.
    숫자 로그는 "dig1 8 1 5 1", "dig2 3 6"의 상대적인 순서를 갖습니다.
    
    예 2:제약:
    • 1 <= logs.length <= 100
    • 3 <= logs[i].length <= 100
    • 의 모든 토큰은 단일 공백 logs[i]
    • 으로 구분됩니다 .
    • logs[i]
    • 식별자와 식별자 뒤에 적어도 한 단어가 있음을 보장합니다.
  • 입력: logs = ["a1 9 2 3 1","g1 act car","zo4 4 7","ab1 off key dog","a8 act zoo"] 출력: ["g1 act car","a8 act 동물원","ab1 오프 키독","a1 9 2 3 1","zo4 4 7"]
  • 예 1:

Pseudo Code

logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]

  1. 요소의 첫번째는 식별자로 두번째부터 식별
  2. 두번째가 단어로그인지 숫자로그인지 확인
  3. 단어 로그는 모든 숫자로그의 앞에 있다는것을 확인
  4. 단어로그 정렬

Code

logs = ["dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"]

letters, nums = [], []
for i in logs:
    if i.split()[1].isdigit():
        nums.append(i)
    else:
        letters.append(i)

letters.sort(key = lambda x :(x.split()[1::],x.split()[0]))
return letters+nums

느낀점

처음 문제만 봤을때는 하나도 이해가 않되서 여러번 고민했던거같다.

물론 책을 보고 이게 이거구나 라고 알았던거같다.

좀더 독해력을 키워야 할듯하다.