일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- lodash
- 자바스크립트
- 타입스크립트
- til
- 자바스크립트 문제
- 자바스크립트 알고리즘 문제
- Baekjoon
- Next
- JavaScript
- stack문제
- 알고리즘문제풀이
- 리액트
- 프로그래머스
- next13
- 자바스크립트 문제 풀이
- 프론트엔드
- leetcode
- react
- leetcode문제풀이
- 자바스크립트 문제풀이
- 자바스크립트코딩테스트
- Next.js13
- 자바스크립트 알고리즘
- 자바스크립트 연결리스트
- 제로베이스
- NPM
- HTML
- CSS
- 리액트쿼리
- JS
- Today
- Total
코드노트
leetcode 937. Reorder Data in Log Files 로그 파일 재정렬, JS, python 본문
leetcode 937. Reorder Data in Log Files 로그 파일 재정렬, JS, python
코드노트 2024. 1. 5. 17:13You are given an array of logs. Each log is a space-delimited string of words, where the first word is the identifier. There are two types of logs: Letter-logs: All words (except the identifier) consist of lowercase English letters. Digit-logs: All words (except the identifier) consist of digits. Reorder these logs so that: The letter-logs come before all digit-logs. The letter-logs are sorted lexicographically by their contents. If their contents are the same, then sort them lexicographically by their identifiers. The digit-logs maintain their relative ordering. Return the final order of the logs.
여러분에게는 로그 배열이 주어집니다.
각 로그는 첫 번째 단어가 식별자인 공백으로 구분된 단어 문자열입니다.
두 가지 유형의 로그가 있습니다:
편지-로그: 모든 단어( 식별자를 제외한)는 소문자 영어 문자로 구성됩니다.
숫자-로그: 모든 단어( 식별자를 제외한)는 숫자로 구성됩니다.
이렇게 하려면 로그의 순서를 바꾸세요: 편지-로그가 모든 숫자-로그 앞에 옵니다.
편지-로그는 내용물에 따라 사전순으로 정렬됩니다.
내용물이 같으면, 식별자에 따라 사전순으로 정렬합니다. 숫자-로그는 상대적인 순서를 유지합니다.
로그의 마지막 순서를 반환합니다.
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"]
문제 설명
- 로그의 가장 앞 부분은 식별자
- 문자로 구성된 로그가 숫자 로그보다 앞에 온다.
- 식별자는 순서에 영향을 끼치치 않는다.
- 문자가 동일한 경우 식별자 순으로 한다.
- 숫자 로그는 입력 순서대로 한다.
python
class Solution(object):
def reorderLogFiles(self, logs):
letters, digits = [], []
for log in logs:
if log.split()[1].isdigit():
digits.append(log)
else:
letters.append(log)
letters.sort(key=lambda x: (x.split()[1:], x.split()[0]))
return letters + digits
- letters, digits 리스트를 만들어준다.
- 문자로그와 숫자로그를 나누기위해 isdigit을 사용해서 숫자인지 문자인지 확인한 후 letters, digits에 각각 넣어준다.
- letters를 lambda함수를 사용하여 정렬을 해주었다. 들어오는 값을 split로 분할한 후 두번째 요소부터 끝까지 기준으로 정렬한다.
- 그리고 각 요소를 공백기준으로 분할하여 첫번째 요소를 선택하여 두번째 기준으로 정렬한다.
- 첫번째 기준은 앞 단어로 확인하고 그 뒤로 뒷단어들도 확인할 수 있도록 하였다.
javascript
var reorderLogFiles = function(logs) {
const letters = [];
const digits = [];
logs.forEach(item => isNaN(item.split(" ")[1]) ? letters.push(item) : digits.push(item))
letters.sort((a, b) => {
const aSubstring = a.split(" ").slice(1).join(" ");
const bSubstring = b.split(" ").slice(1).join(" ");
if(aSubstring !== bSubstring) return aSubstring.localeCompare(bSubstring)
return a.split(" ")[0].localeCompare(b.split(" ")[0])
})
return [...letters, ...digits]
};
- 자바스크립트도 파이썬으로 푼 문제를 토대로 먼저 숫자인지 isNaN을 사용하여 문자, 숫자 로그를 나누었다.
- sort를 통해서 할 수 있지만 확실히 파이썬과는 다르게 직접적으로 정렬할 기준들을 명시해주어야한다.
- slice를 사용해서 로그 뒤에 오는 문자 단어들을 비교해보고 localeCompare를 통해서 문자열의 순서를 정렬했다.
'Code note > 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글
leetcode 215. Kth Largest Element in an Array 배열의 K번째 큰 요소, Python, javascript 풀이 (1) | 2024.01.06 |
---|---|
leetcode 125. Valid Palindrome 유효한 펠린드롬, JS, python (0) | 2024.01.04 |
BAEKJOON 10798번 세로읽기 풀이 / javascript (1) | 2023.10.02 |
BAEKJOON 2566번 최댓값 풀이 / javascript (1) | 2023.10.02 |
BAEKJOON 2738번 행렬 덧셈 풀이 / javascript (0) | 2023.10.01 |