본문 바로가기

프로그래머스/구현

[구현] 프로그래머스 '파일명 정렬' - js

반응형

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/17686

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

2. 코드

이 문제는 문자열 정리하기 + 상황에 따라 정렬하기 이 두 가지가 핵심인 문제다. 문자열을 정렬하기 좋게 head, number, tail로 나누는 과정에서 조건문을 잘 세워야한다.

무조건 처음에는 무조건 isNaN만 사용했는데, 그렇게 설정하면 tail로 들어가야 할 숫자들이 number로 들어가는 등 대참사가 일어난다^^ 공백을 isNaN을 통해 검색하면 true가 나올 것 같지만 의외로 false가 나온다. 이게 매우 중요한 부분이다! 그래서 parseInt를 한 번 써주고, 그것을 isNaN 검사 시켜야한다.

그리고 sort 함수 내부에 조건을 정의해줄 때는 모든 상황에 대한 분기처리를 해줘야 한다! 하나만 해주면 적용이 안된다. 이것도 중요!

const solution = (files) => {
  // 파싱된 파일을 저장하는 배열  
  const newFile = [];
    files.forEach(file => {
        const parts = ['', '', ''];
        [...file].forEach(word => {
            const isNumber = !isNaN(parseInt(word));
            // 만약 지금 글자가 숫자가 아니고 NUMBER 배열이 비어진 상태라면 ==> HEAD에 들어가야 한다.
            if (!isNumber && !parts[1].length) {
                parts[0] += word;
            // 만약 지금 글자가 숫자이고, TAIL 배열이 비어진 상태라면 ==> NUMBER에 들어가야 한다.
            } else if (isNumber && !parts[2].length) {
                parts[1] += word;
            // 그 외에는 TAIL에 추가.
            } else {
                parts[2] += word;
            }
        })  
        newFile.push(parts)
    });
  
    newFile.sort((a, b) => {
        const stringA = a[0].toUpperCase(), stringB = b[0].toUpperCase();
      	// HEAD 정렬 : 앞 단어의 첫 글자가 사전 순 뒤이면 자리 바꾸기
        if (stringA > stringB) {
            return 1;
        // HEAD 정렬 : 앞 단어의 첫 글자가 사전 순 앞이면 자리 유지
        } else if (stringA < stringB) {
            return -1;
        // 각 단어의 첫 글자가 같으면 NUMBER 정렬
        } else {
            const parseIntA = parseInt(a[1]), parseIntB = parseInt(b[1]);
            return parseIntA - parseIntB;
        }
    })
    
    return newFile.map(arr => arr.join(''))
}

 

구현 유형 연습하기 딱 좋은 문제인 것 같다.

 

parseInt 쓰는 이유)

https://school.programmers.co.kr/questions/48261

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

이해에 참고한 블로그)

https://velog.io/@developyoun/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-3%EC%B0%A8-%ED%8C%8C%EC%9D%BC%EB%AA%85-%EC%A0%95%EB%A0%AC-JS

 

프로그래머스 [3차 파일명 정렬] - JS

3차 파일명 정렬https://programmers.co.kr/learn/courses/30/lessons/17686단순 파싱 문제. 정규표현식으로 손쉽게 푸는 방법이 있긴하지만, 아직 정규표현식은 역량부족...적당한 반복문과 제어문을 통해 글자

velog.io

 

복기

6/6
반응형