2_1. 큰수 출력하기
function solution2_1(arr: number[]): string {
let answer = [arr[0]];
for (let i = 1; i < arr.length; i++) {
if (arr[i - 1] < arr[i]) answer.push(arr[i]);
}
return answer.join(" ");
}
console.log(solution2_1([7, 3, 9, 5, 6, 12]));
0번 째 경우를 따로 명시해주기 번거로워서 answer의 초기값에 처음부터 넣어주었다.
+ filter를 쓰는 방법도 있음
2_2. 보이는 학생
//이렇게 하면 틀림!
function solution2_2(arr: number[]): number {
let answer = 0;
for (let i = 1; i < arr.length; i++) {
if (arr[i - 1] < arr[i]) answer++;
}
return answer;
}
console.log(solution2_2([130, 135, 148, 140, 145, 150, 150, 153]));
//-------강의 풀이------
function solution2_2_1(arr: number[]): number {
let answer = 1;
let max = arr[0]
for (let i = 1; i < arr.length; i++) {
if (arr[i]>max) {
answer++;
max = arr[i];
}
}
return answer;
}
console.log(solution2_2_1([130, 135, 148, 140, 145, 150, 150, 153]));
바로 앞의 숫자와만 비교하는 것이 아니라 지금까지의 숫자들과 비교했어야 함!
답이 맞았던 이유 : i=0일때 answer이 2가 되었어야 하는데 이에 대해 생각하지 않았다.
2_3.가위바위보
function solution2_3(arr1: number[], arr2: number[]): string {
let answer: string[] = [];
for (let i = 0; i < arr1.length; i++) {
let check = arr1[i] - arr2[i];
if (check === 0) answer.push("D");
else if (check === 2) answer.push("B");
else if (check === -2) answer.push("A");
else if (check > 0) answer.push("A");
else answer.push("B");
}
return answer.join("\n");
}
console.log(solution2_3([2, 3, 3, 1, 3], [1, 1, 2, 2, 3]));
보를 냈을 때의경우가 헷갈렸다.
2_4. 점수계산
function solution2_4(arr: number[]): number {
// let answer:number[]=[];
// for(let i=0; i<arr.length; i++){
// if(i===0) answer.push(arr[0]);
// if(arr[i]===1){
// answer.push(answer[i-1]+1);
// } else answer.push(0);
// }
// return answer; -> 이렇게 하면 NaN가 나온다..?
let answer = [arr[0]];
for (let i = 1; i < arr.length; i++) {
if (arr[i] === 1) {
answer.push(answer[i - 1] + 1);
} else answer.push(0);
}
return answer.reduce((acc, cur) => acc + cur, 0);
}
console.log(solution2_4([1, 0, 1, 1, 1, 0, 0, 1, 1, 0]));
처음에 짠 코드에서 답이 이상하게 나오는 이유를 찾지 못해서 애먹은 문제.
결국 answer을 arr[0]값이 들어있는 상태로 초기화 해줘서 첫번째 if문을 없애는 방법으로 풀었는데
나중에 보니 원인은 for문 안에서 첫번째 if처리 후, 두번째 if 처리가 진행 되기 때문이였다.
(배열[-1]은 undifined가 반환되고, undefined+1 은 NaN! )
두 if문을 if else로 연결하거나, 첫번째 if문 종료 후, i++ 를 추가해주면 해결!
2_5. 등수구하기
function solution2_5(arr: number[]): string {
let len = arr.length;
let answer = Array.from({ length: len }, () => 1);
for (let i = 0; i < len; i++) {
for (let j = 0; j < len; j++) {
if (arr[i] < arr[j]) answer[i]++;
}
}
return answer.join(" ");
}
console.log(solution2_5([87, 89, 92, 100, 76]));
const arr = new Array(5); // 5짜리 길이를 가진 빈배열 생성.
const arr = Array.from( {length: 5}, () => 0 ); // 5짜리 길이가 0으로 채워진 배열 생성.
작은 값으로 변수 Max를 정해놓고 비교하는 값에 따라서 Max를 바꿔주는 다른 풀이랑 비슷한 방법인것 같다.
[1,1,1,1,1] 로 초기화된 배열을 하나씩 변화시키기.
'알고리즘(with TS)' 카테고리의 다른 글
알고리즘 풀이 3)4-5 (0) | 2023.01.23 |
---|---|
알고리즘 풀이 2)6-7, 3)1-3 & TS(isNaN 사용시 주의할 부분) (0) | 2023.01.19 |
알고리즘 풀이 1)15-17번 (0) | 2023.01.14 |
알고리즘 풀이 1)11-14번 (0) | 2023.01.14 |
알고리즘 풀이 1)6-10번 (0) | 2023.01.12 |