그 동안에 쓴 글이 의미 없진 않지만 노력에 비해 매우 잘못된 방향성을 가지고 있단 것을 알게되었다 지금이라도 알았으니 다행이고 알았으면 바뀌려고 노력해야지
제목은 나중에 찾기 편하게 검색용
외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요
| 입력 | 출력 |
| [3, 76, 24] | [3, 1, 2] |
| [30, 10, 23, 6, 100] | [2, 4, 3, 5, 1] |
먼저 어떻게 할지 생각을 해보자
1. 배열을 복사해 순서대로 정렬
2. 복사한 배열을 정렬하고 비교 해서 완성한다
배열 복사는 쓰레드 문법으로 해결 정렬까지 완료 얕은 깊은 복사 확인 완료
let arr = [...emergency].sort((a, b) => b - a)
반복문 돌렸는데
문제
- 반복 조건에서 .length 빼먹었는데 그냥 반복문만 무시되고 오류 안떠서 나중에 발견하고 추가
- 배열의 인덱스 가져와서 빈 배열에 푸쉬했으니 생각을 잘못했다
- 그래서 k라는 새로운 값을 만들어 입력받은 배열을 조건에 맞게 하나씩 바꾸자
- k가 반복문 안에서 선언하니 증가가 안된다 반복문 밖에 선언으로 변경
- 해결하나 싶었으나 [1, 2, 3, 4, 5, 6, 7] 이 때 실패 [7,6,5,4,5,6,7]
- map()을 써보자 맵에서의 콜백에서 조건 걸고 억지로 써보려 했으나 undefined
해결
function solution(emergency) {
let result = new Array(emergency.length)
let copy = [...emergency].sort((a, b) => b - a)
let k = 0
for (let i = 0; copy.length > i; i++) {
k++
for (let j = 0; emergency.length > j; j++) {
if (copy[i] === emergency[j]) {
result[j] = k
}
}
}
return result;
}
결국엔 해결 기존 k를 새로운 빈 배열에 추가했다
성과 :
- k를 선언할 때 반복문 안에서 선언하니 반복할 때마다 초기화 되었다 반복문의 스코프는 반복할 때마다 초기화 되는 것으로 예상됨
- 콜백에 if가 참 일 때만 내가 원하는 결과를 가지는 그런 복잡한 것들은 안된다 아직 내 수준에서는 그냥 간단한 식에서만 쓰자
마지막으로 모범코드이다 왜 저런 생각을 못했을까
function solution(emergency) {
let sorted = emergency.slice().sort((a,b)=>b-a); // slice() 새로운 배열 만들기
return emergency.map(v=>sorted.indexOf(v)+1); // map()으로 맞는 인덱스를 가져와 채운다
}
'오늘 뭐했냐 > 기억하면 좋을 문제들' 카테고리의 다른 글
| 객체 활용 (0) | 2023.06.13 |
|---|---|
| 모스 부호 (0) | 2023.06.13 |
| 숨어있는 숫자의 덧셈 (1) (0) | 2023.05.31 |
| 자릿수 더하기 - 숫자를 각 자리마다 배열에 담기 (0) | 2023.05.31 |
| 배열의 유사도 - .filter() / .includes() 활용 복습 및 Set형 활용 (0) | 2023.05.30 |