Algorithm JS | 프로그래머스 코딩테스트_진료순서 정하기

앙두·2023년 4월 6일
0

Algorithm

목록 보기
3/17

📑 문제

  • 인자 emergency 는 배열 / 요소는 number (길이: 10이하, 요소: 100이하)
  • 중복 요소는 없음
  • 배열로 반환

🤓 나의 풀이

일단 실패했다. 😭😫

구글링으로 다른 개발자들의 풀이를 참고하며 재풀이를 해보았다. 그러던 중, new Map() 함수를 사용한 풀이를 보게됐는데, 처음 알게된 함수라서 익혀보고자 new Map() 함수로 풀어본 풀이를 기록해보려 한다. ... 흑흑 난 아직 알고리즘 풀이를 못 풀면 슬프고 속상하다. 😔
function solution(emergency) {
  	let emergencySort = [...emergency].sort((a, b)=> b - a);
  
  	let order = new Map();
  	for(let i = 0; i < emergencySort.length; i++) {
    	order.set(emergencySort[i], i+1);
    }
  
  	return emergency.map(v => order.get(v)) // [ 2, 3, 1 ]
}

solution([30, 5, 33])
  • 인자 emergency 를 spread oprator(스프레드 연산자)얕은 복사(shallow copy) 를 시켜줍니다. (추후 원 배열을 사용해야 하기 때문에 달라지면 안되기 때문입니다.)
  • 순위를 정하기 위해, 내림차순으로 sort() 메서드를 사용합니다.
  • order 라는 식별자에 생성자 함수 new Map() 을 할당시켜줍니다.
  • for문 으로, order 에 set() 메서드로,
    key(emergencySort의 요소), value(0부터 돌아갈 i에 +1) 값들을 정해줍니다.
    ( ➕ 참고 : set() 후, order 의 형태는 이렇게 됩니다. 👇🏻 )
Map(3) {
	33 => 1,
    50 => 2,
    5 => 3,
}
  • 원 배열 emergency 에 map() 메서드를 사용합니다.
  • emergency 의 각 요소에 해당하는 요소들을 order.get() 메서드를 사용하여, order 객체에서 찾아 value 값을 가져옵니다. (get() 메서드에, key 값을 넣어주면 value 값을 반환해줍니다.)
  • 가져온 value 값들로 구성된 새로운 배열로 반환시켜줍니다.

요로코롬 풀이 완료!
그러나 효율적인 풀이는 아니다.
많은 양의 시간이 소요되고, 코드도 길다.
new Map() 공부용 .. ㅎ !


👍🏻 제일 간단한 풀이 (다른 사람들의 풀이 참고)

function solution(emergency) {
	let sorted = [...emergency].sort((a,b) => b-a);
  	return emergency.map(v => sorted.indexOf(v)+1);
}

스프레드 연산자를 통해 얕은 복사 후, 내림차순으로 정렬해주는 건 같다!
정렬 및 복사한 배열(sorted)에서 원배열의 요소들을 index 번호로 찾아, +1을 해주어 새 배열로 반환해주는 것 !

쉬운 메서드로 더 간단한, 더 효율적인 풀이였당 ..

부족한 나의 알고리즘 사고력.. ㅜ_ㅜ

profile
쓸모있는 기술자

0개의 댓글