반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- ReactNative
- Oracle
- 리액트
- Java의정석
- typescript
- 오라클
- 자바스크립트
- 이안의평일코딩
- 정보처리기사실기정리
- 자바스크립트 코딩테스트
- 코딩테스트
- 자바의정석
- 정보처리기사실기
- spring
- 리액트네이티브
- 스프링
- 자스코테
- 국비코딩
- react
- 정보처리기사정리
- 정보처리기사
- 정보처리기사실기요약
- CSS
- 정보처리기사요약
- 평일코딩
- php
- 국비IT
- VUE
- javascript
- 타입스크립트
Archives
- Today
- Total
이안의 평일코딩
[JS] 1, 2차원 배열 탐색 (가위바위보, 등수, 격자판, 봉우리) 본문
반응형
큰 수 출력
<script>
function solution(arr){
let answer=[];
answer.push(arr[0]);
for(let i=1; i<arr.length; i++){
if(arr[i]>arr[i-1]) answer.push(arr[i]);
}
return answer;
}
let arr=[7, 3, 9, 5, 6, 12];
console.log(solution(arr));
</script>
보이는 학생
<script>
function solution(arr){
// 맨 앞자리 학생은 보이므로 1부터 시작
let answer=1, max=arr[0];
for(let i=1; i<arr.length; i++){
if(arr[i]>max){
answer++;
max=arr[i];
}
}
return answer;
}
let arr=[130, 135, 148, 140, 145, 150, 150, 153];
console.log(solution(arr));
</script>
가위바위보
<script>
function solution(a, b){
// A가 이기면 A, B가 이기면 B, 비기면 D
// 1:가위, 2:바위, 3:보
let answer="";
for(let i=0; i<a.length; i++){
if(a[i]===b[i]) answer+='D'+' ';
else if(a[i]===1 && b[i]===3) answer+='A'+' ';
else if(a[i]===2 && b[i]===1) answer+='A'+' ';
else if(a[i]===3 && b[i]===2) answer+='A'+' ';
else answer+='B'+' ';
}
return answer;
}
let a=[2, 3, 3, 1, 3];
let b=[1, 1, 2, 2, 3];
console.log(solution(a, b));
</script>
점수 계산
<script>
function solution(arr){
let answer=0, count=0;
for(let x of arr){
if(x===1){
count++;
answer+=count;
}
else count=0;
}
return answer;
}
let arr=[1, 0, 1, 1, 1, 0, 0, 1, 1, 0];
// 1+1+2+3+1+2 = 10
console.log(solution(arr));
</script>
등수구하기
Array.from() 메서드는 유사배열객체(array-like object)나 반복가능한객체(iterable object)를 복사해 새로운 Array객체를 만든다.
<script>
function solution(arr){
let n=arr.length;
let answer=Array.from({length:n}, ()=>1); // 배열의길이, 1로 초기화
for(let i=0; i<n; i++){
for(j=0; j<n; j++){
if(arr[j]>arr[i]) answer[i]++;
}
}
return answer;
}
let arr=[87, 89, 92, 100, 76];
console.log(solution(arr));
</script>
격자판 최대합
<script>
function solution(arr){
let answer=Number.MIN_SAFE_INTEGER;
let n=arr.length; // 5
let sum1=sum2=0; // sum1은 행, sum2는 열
for(let i=0; i<n; i++){
sum1=sum2=0;
for(let j=0; j<n; j++){
sum1+=arr[i][j]; // 앞이 고정되고 뒤가 돈다 [0][1] [0][2]..
sum2+=arr[j][i];
}
answer=Math.max(answer, sum1, sum2);
}
sum1=sum2=0;
for(let i=0; i<n; i++){
sum1+=arr[i][i]; // 대각선
sum2+=arr[i][n-i-1]; // 0 5-0-1, 0 5-0-2
}
answer=Math.max(answer, sum1, sum2);
return answer;
}
let arr=[[10, 13, 10, 12, 15],
[12, 39, 30, 23, 11],
[11, 25, 50, 53, 15],
[19, 27, 29, 37, 27],
[19, 13, 30, 13, 19]];
console.log(solution(arr));
</script>
봉우리
<script>
function solution(arr){
let answer=0;
let n=arr.length; // 5
// 12시, 3시, 6시, 9시 네방향 2중 for문 돌면서 순서대로 확인
let dx=[-1, 0, 1, 0]; // 행
let dy=[0, 1, 0, -1]; // 열
for(let i=0; i<n; i++){
for(let j=0; j<n; j++){
let flag=1;
for(let k=0; k<4; k++){ // 네방향
let nx=i+dx[k]; // 가려고 하는 행좌표 방향
let ny=j+dy[k]; // 가려고 하는 열좌표 방향
// arr[nx][ny] 상하 좌우 보는 좌표. 크거나 같으면 arr[i][j]는 봉우리가 아니다
// nx, ny가 0보다 크고 n보다는 작아야 범위안에 들어와 있는 것.
if(nx>=0 && nx<n && ny>=0 && ny<n && arr[nx][ny]>=arr[i][j]){
flag=0; // 봉우리가 아닐 때
break;
}
}
if(flag) answer++; //0이면 거짓, 1이면 참;
}
}
return answer;
}
// 격자의 바깥부분은 0
let arr=[[5, 3, 7, 2, 3],
[3, 7, 1, 6, 1],
[7, 2, 5, 3, 4],
[4, 3, 6, 4, 1],
[8, 7, 3, 5, 2]];
console.log(solution(arr));
</script>
반응형
'Study > JS Algorithm Rocket' 카테고리의 다른 글
[모집] 자바스크립트 알고리즘 로켓스터디 (0) | 2021.08.23 |
---|---|
[JS] 완전탐색 (브루트포스) (0) | 2021.05.26 |
[JS] 문자열탐색 (회문, 팰린드롬, 추출, 최단거리, 압축) (0) | 2021.05.25 |
[JS] 기초 (2) - 문자대체, 찾기, 개수, 중복제거, 대소문자 변환 (0) | 2021.05.17 |
[JS] 기초 (1) - 최솟값, 삼각형, 개수, 합, 홀수, 10부제, 일곱난쟁이 (0) | 2021.05.17 |
Comments