*7개 문제 중 2개 못 풀었음 (22.02.02)
1) 큰 수 출력하기
function solution(arr) {
let answer = [];
answer.push(arr[0]); // arr의 0번째 인덱스는 무조건 들어가서 먼저 넣어줌
for(let i=0; i < arr.length; i++) {
if(arr[i] < arr[i+1]) {
answer.push(arr[i+1]);
}
}
return answer;
}
let arr = [7, 3, 9, 5, 6, 12];
console.log(solution(arr));
2) 보이는 학생
function solution(arr) {
let answer = 1; // 제일 처음에 있는 1명은 보임
let max = arr[0]; // 제일 처음에 있는 사람의 키
for(let i=0; i<arr.length; i++){
if(arr[i] > max) {
max = arr[i];
answer++;
}
}
return answer;
}
let arr = [130, 135, 148, 140, 145, 150, 150, 153];
console.log(solution(arr));
=> answer 는 5를 반환
*여기서 진짜 기본적인 실수를... if문을 두 줄로 써두고 코드를 줄여보겠다고 중괄호를 안했다. 당연히 조건이 두 줄이니까 코드가 정상적으로 돌아가지 않았다. 창피하지만, 다시는 반복하면 안되니까 기록.
function solution(arr) {
let answer = 1; // 제일 처음에 있는 1명은 보임
let max = arr[0]; // 제일 처음에 있는 사람의 키
for(let i=0; i<arr.length; i++){
if(arr[i] > max)
max = arr[i];
answer++;
}
return answer;
}
let arr = [130, 135, 148, 140, 145, 150, 150, 153];
console.log(solution(arr));
=> answer 는 9를 반환
3) 가위 바위 보
function solution(a, b) {
let answer = "";
for(let i=0; i < a.length; i++) {
if(a[i] === 3 && b[i] === 1 || a[i] === 1 && b[i] === 3) {
if (a[i] > b[i])
answer += "B";
if (a[i] < b[i])
answer += "A";
} else {
if (a[i] > b[i])
answer += "A";
if (a[i] < b[i])
answer += "B";
if (a[i] === b[i])
answer += "D";
}
}
return answer;
}
let a = [2, 3, 3, 1, 3];
let b = [1, 1, 2, 2, 3];
console.log(solution(a, b));
4) 점수 계산
function solution(arr) {
let answer = 0
let cnt = 0;
for(let i=0; i < arr.length; i++) {
if(arr[i] === 0)
cnt = 0; // 점수가 0일 경우 cnt를 0으로 초기화
else if(arr[i] === 1) {
cnt++;
answer += cnt;
}
}
return answer;
}
let arr = [1, 0, 1, 1, 1, 0, 0, 1, 1, 0];
console.log(solution(arr));
5) 등수 구하기
동점 있을 경우에는 같은 등수로 출력
ex) const arr = [92, 92, 92, 100, 76] 일 경우 2 2 2 1 5 로 출력
function solution(arr) {
let answer = "";
for(let i = 0; i < arr.length; i++) { // i를 고정시켜두고
let cnt = 1;
for(let j = 0; j < arr.length; j++) { // j를 돌며 비교
if(arr[j] > arr[i])
cnt++;
}
answer += cnt + " ";
}
return answer;
}
const arr = [87, 89, 92, 100, 76];
console.log(solution(arr)); // 4 3 2 1 5
*강사님 코드
- 나는 출력 결과에 배열 표시가 없길래 문자열로 표시했는데, 그 부분 빼고는 비슷한 로직이다.
Array.from()으로 arr의 길이인 n 만큼 배열 생성 후 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]++;
}
}
return answer;
}
const arr = [87, 89, 92, 100, 76];
console.log(solution(arr));
6) 격자판 최대합
- 행과 열의 합계 구하기까지 하고, 그 다음은 어떻게 구현해야하나 고민하다가 강의를 보고 이해했다.
비슷한 문제를 만났을 때 기억할 수 있도록 그림을 그려왔다.. ㅎㅎ
*강사님 코드
- 나는 sum을 첫번째 for문 안에 뒀었는데, 강사님은 전역으로 빼고 필요할 때 초기화해서 쓰는 방식으로 구현하셨다.
Math.max를 이용해서 가장 큰 값을 answer에 담는 것도 생각하지 못했던 방법인데 좋은 것 같다.
function solution(arr) {
let answer = Number.MIN_SAFE_INTEGER;
let n = arr.length;
let sum1 = sum2 = 0;
// 행과 열의 합
for(let i=0; i<n; i++) {
sum1 = sum2 = 0; // 행과 열이 바뀌기 전 초기화
for(let j=0; j<n; j++) {
sum1 += arr[i][j];
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];
}
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));
7) 봉우리
👉한 바퀴 돌고 와서 다시 풀기
*강사님 코드
function solution(arr) {
let answer = 0; // 카운팅
let n = arr.length;
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]; // 열 좌표
if(nx>=0 && nx<n && ny>=0 && ny<n && arr[nx][ny]>=arr[i][j]) { // 봉우리 판단, 인덱스 범위(- 불가): nx>=0 && nx<n && ny>=0 && ny<n
flag = 0; // 봉우리가 아닐 경우
break; // 크거나 같은 수 발견 시 반복할 필요 없으니까
}
}
if (flag)
answer++;
}
}
return answer;
}
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));
'Algorithm' 카테고리의 다른 글
[백준 알고리즘] 10773번: 제로 (JavaScript) (0) | 2022.02.09 |
---|---|
[인프런 강의] JS 알고리즘 문제풀이(코딩테스트 대비) - 섹션3 (0) | 2022.02.06 |
[이론] 삼각형의 결정 조건 (0) | 2022.01.30 |
[인프런 강의] JS 알고리즘 문제풀이(코딩테스트 대비) - 섹션1 (0) | 2022.01.30 |
[백준 알고리즘] 1316번: 그룹 단어 체커 (JavaScript - 실패코드) (0) | 2022.01.16 |