본문 바로가기

프로그래머스 1단계 - 문자열 내림차순으로 배치하기 본문

알고리즘/1단계

프로그래머스 1단계 - 문자열 내림차순으로 배치하기

개발자로 거듭나기 2022. 9. 23. 09:14
반응형

1 단계 : 문자열 내림차순으로 배치하기

코딩테스트 연습 > 연습문제 > 문자열 내림차순으로 배치하기


문제 설명

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.


제한 사항

str은 길이 1 이상인 문자열입니다.


입출력 예
s return
"Zbcdefg" "gfedcbZ"

반응형

코드

function solution(s) {
    // 01
    // 너무 이상하게 풀었네요
    // 처음에 떠올린 방법으로 풀려다보니
    // let answer = '';
    // let obj = {}
    // let overlap = []; // 중복이 될 때
    // s.split('').forEach((el) => {
    //     if(obj[el.charCodeAt()]) overlap.push(el); // 중복처리
    //     obj[el.charCodeAt()] = el; // 각각의 문자마다 90 : Z 이런식으로 객체에 저장
    // });
    // 
    // let target = Object.keys(obj); // key를 뽑아서
    // 
    // // 중복되는게 있다면 담기겠죠 "Zbbcdefg"
    // /*
    // 	[
    //       '90',  '98',  '99',
    //       '100', '101', '102',
    //       '103', 98
    //     ]
    // */
    // // 이렇게요. 그 후 내림차순 정렬해서 answer에 push 해줄게요
    // for(let val of overlap) target.push(val.charCodeAt()); // 중복처리해준다.
    // target.sort((a,b) => b-a).forEach((el) => { 
    // // 내림차순 정렬해서 그대로 push (charCodeAt()은 대문자가 소문자보다 더 작다
    //     answer += obj[el];
    // });
    // return answer;
    
    // 02
    return s
    .split("")
    .sort()
    .reverse()
    .join("");
}

리뷰

순서는 다음과 같다
1. answer은 return 할 배열, obj는 인자로 들어온 s 에 대한 아스키코드 : 알파벳 객체, overlap은 중복이 될 때 따로 빼 놓을 배열
2. obj를 구성하기 위해 s.split('')(배열).forEach(el) 해서 obj[el.charCodeAt()] = el
3. forEach 돌 때 중복된게 있다면 overlap에 빼줍니다.
4. obj의 key를 빼서 이 key 배열에 중복된 원소를 넣어줍니다.
5. target.sort((a,b) => b-a) 내림차순으로 return 할 거라서 내림차순 정렬하고 forEach
6. answer에 그대로 push 하시면 끝

총평 : 1번과 2번 풀이가 있는데 여러분은 어떤걸로 푸실래요?

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12917
반응형
Comments