본문 바로가기
문제 풀이/Programmers

[프로그래머스] 12930번: 이상한 문자 만들기 (JavaScript)

by Electrohyun 2025. 7. 4.

 


 

생각 과정

 

문자열의 홀수 인덱스만 대문자로 바꾸면 된다? -> 단어 단위로 리셋된다! (1차 실패)

 

그렇다면 스페이스 한 칸(' ')을 기준으로 삼아야 할 것이고, 해결하는 방법은 다양하겠지만

 

split() 메서드와 join 메서드를 사용해 단어를 배열의 요소로 쪼개는 방법을 선택했다.

 

function ascendingOrder(arr) {
  return arr.sort((a, b) => a - b);
}

function findMaxSupportNumber(requestArr, money) {
  let idx = 0;

  while(idx < requestArr.length) {
    if (money - requestArr[idx] < 0) break;
    money -= requestArr[idx];
    idx++;
  }

  return idx;
}

function solution(d, budget) {
  const sorted = ascendingOrder(d);
  
  const answer = findMaxSupportNumber(sorted, budget);

  return answer;
}

 

 

알게 된 것들

 

ascendingOrder 함수에서 매개변수에 sort() 함수를 바로 사용하고 있다.

 

-> 이럴 경우 원본 배열을 직접 변경하기 때문에 원래의 데이터를 해친다. 그리고 이것이 의도하지 않은 부작용을 일으킬 수 있다.
그렇기 때문에 불변성(Immutability)를 지켜야 한다.

 

-> return arr.slice().sort((a, b) => a - b); 처럼 복제하여 사용하도록 하자.