알고리즘(with TS)

알고리즘 풀이 2)1-5

2023. 1. 17. 12:31

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] 로 초기화된 배열을 하나씩 변화시키기.