문제
N(1<=N<=100)명의 학생의 국어점수가 입력되면 각 학생의 등수를 입력된 순서대로 출력하는 프로그램을 작성하세요. 같은 점수가 입력될 경우 높은 등수로 동일 처리한다. 즉 가장 높은 점수가 92점인데 92점이 3명 존재하면 1등이 3명이고 그 다음 학생은 4등이 된다.
입력예제 | 87 89 92 100 76
출력예제 | 4 3 2 1 5
풀이
이중 for문을 사용한다. 값을 두개씩 비교하면서 조건에 충족하면 answer를 ++하는 방법을 사용한다.
이중for문 개념
for(let i = 0; i < 5; i++){
for(let j = 0; j < arr.length; j++){
}
}
i = 0 일 때, j가 0부터 arr.length 까지 돈다.
i = 1 일 때, j가 0부터 arr.length 까지 돈다.
i = 2 일 때, j가 0부터 arr.length 까지 돈다.
i = 3 일 때, j가 0부터 arr.length 까지 돈다.
i = 4 일 때, j가 0부터 arr.length 까지 돈다.
처음에 푼 방법1
function solution(arr){
let answer = [];
let count = 1;
for(let i = 0; i < arr.length; i++){
for(let j = 0; j < arr.length; j++){
if(arr[j] > arr[i]) {
count++;
} else count = 0;
answer.push(count);
}
return answer;
}
}
let arr = [87, 89, 92, 100, 76];
console.log(solution(arr));
처음에 푼 방법2
const solution = (arr) => {
let answer = [];
for (let i = 0; i < arr.length; i++) {
let count = 0;
for (let j = 0; j < arr.length; j++) {
if (arr[i] < arr[j]) count++;
}
answer.push(count + 1);
}
return answer;
}
const arr = [87, 89, 92, 92, 76];
console.log(solution(arr));
현재값arr[i]이 arr[j]보다 작으면 카운팅,
내 값에서 +1한 값을 answer배열에 누적한다.
다른 풀이
1로 초기화된 1차원 배열을 answer에 미리 만들어놓는다.
let n = arr.length;
let answer = Array.from({length:n}, ()=>1);
// Array.from으로 배열의 모든 요소를 1로 바꿔주었다.
// [1, 1, 1, 1, 1]
function solution(arr){
let n = arr.length;
let answer = Array.from({length:n}, ()=>1);
for(let i = 0; i < n; i++){
for(let j = 0; j < n; j++){
if(arr[j] > arr[i]) answer[i]++;
// answer의 i번째 값을 ++ 해준다.
// answer는 배열이니까 answer배열의 i번째에 넣어서 ++ 해줘야한다.
}
}
return answer;
}
let arr = [87, 89, 92, 100, 76];
console.log(solution(arr));
사용한 개념
Array.from
배열값을 변경하여 새로운 배열 생성
유사배열객체arrayLike나 반복 가능한 객체를 얕게 복사해서 새로운 Array 객체를 만든다.
배열값 각각에 원하는 연산을 수행해서 새로운 배열 생성하기
console.log(Array.from('foo'));
// expected output: Array ["f", "o", "o"]
console.log(Array.from([1, 2, 3], x => x + x));
// expected output: Array [2, 4, 6]
// 콜백함수로 화살표 함수 사용
'💡Algorithm > 문제풀기' 카테고리의 다른 글
JS알고리즘 | 봉우리 (2차원 배열 네방향 탐색) (0) | 2021.05.02 |
---|---|
JS알고리즘 | 격자판 최대합(2차원 배열) (0) | 2021.05.01 |
JS알고리즘 | 점수계산 (0) | 2021.04.26 |
JS알고리즘 | 가위 바위 보 (0) | 2021.04.25 |
JS알고리즘 | 보이는 학생 (0) | 2021.04.25 |