반응형
문제) 보이는 학생
선생님이 학생을 일렬로 세웠을 때, 맨 앞에 서있는 선생님이 볼 수 있는 학생의 수를 구하기. 키의 숫자 배열이 주어진다.
[100, 120, 110, 120, 130, 105] => 1+ 1+ 0 + 0 + 1 + 0 = 3
function solution(numbers) {
let answer;
// code here;
return answer;
}
해답)
function solution(numbers) {
let answer = 0,
max = Number.MIN_SAFE_INTEGER;
for (let num of numbers) {
if (max < num) {
answer++;
max = num;
}
}
return answer;
}
문제) 가위바위보
두 배열이 주어졌을 때, 경기의 승자를 담은 배열을 출력하기. 가위는 1, 바위는 2 보는 3이다. 각 경기의 승자(A or B)를 출력한다. 비길 경우 D를 출력한다.
A = [1, 2, 3], B = [2, 2, 2] => ['B', 'D', 'A']
function solution(arrA, arrB) {
let answer;
// code here;
return answer;
}
선생님 해답) A를 기준으로 A가 비기는 경우, A가 이기는 경우, 그 외엔 B가 이기는 것으로 풀이
function solution(arrA, arrB) {
let answer = [];
for(let i = 0; i< arrA.length; i++) {
if(arrA[i] === arrB[i]){
answer.push('D')
}
else if(arrA[i] === 1 && arrB[i] === 3) {
answer.push('A')
}
else if(arrA[i] === 2 && arrB[i] === 1) {
answer.push('A')
}
else if(arrA[i] === 3 && arrB[i] === 2) {
answer.push('A')
} else {
answer.push('B')
}
};
return answer;
}
나의 해답) 조잡ㅋ
function solution(arrA, arrB) {
function winner(a, b) {
if (a === b) {
return 'D'
} else if (a > b) {
if (a === 2) {
return 'A'
} else {
return b === 1 ? 'B' : 'A';
}
} else {
if (b === 2) {
return 'B';
} else {
return a === 1 ? 'A' : 'B';
}
}
};
let answer = []
for (let i = 0; i < arrA.length; i++) {
let mid = winner(arrA[i], arrB[i]);
answer.push(mid);
}
return answer;
}
문제) 점수계산
0 :못맞춤, 1: 맞춤 으로 이뤄진 채점 결과가 주어졌을 때, 연속으로 맞으면 가산되는 채점 프로그램이 있다고 하자.
[1, 0, 1, 1, 0] => 1+ 0 + 1 + 2+ 0 = 4
function solution(results) {
let answer;
// code here;
return answer;
}
선생님 해답)
function solution(results) {
let answer = 0, cnt = 0;
for(let x of results) {
if(x) {
cnt ++;
answer += cnt;
} else {
cnt = 0;
}
};
return answer;
}
나의 해답) 조잡
function solution(results) {
let answer = results[0];
let grades = [results[0]]
for (let i = 1; i < results.length; i++) {
if (results[i]) {
if (results[i - 1]) {
grades.push(grades[i - 1] + 1);
answer += grades[i - 1] + 1
} else {
grades.push(1)
answer++;
}
} else {
grades.push(0);
}
};
return answer;
}
문제 ) 등수구하기
점수가 같을 경우 같은 등으로 처리한다. 1등이 3명일 경우, 그 다음 등수는 4등이다.
[10, 40, 20, 20 ] => [4, 1, 2, 2]
function solution (arr) {
let answer;
// code here;
return answer;
}
해답) sort()
매소드를 사용할 수 있는 경우
function solution (arr) {
let answer = [], bin = [...arr];
bin = bin.sort((a, b) => -(a - b));
for(let i = 0; i < arr.length; i++) {
let index = bin.indexOf(arr[i]);
answer.push(index);
};
return answer;
}
해답 2) sort()
매소드를 사용할 수 없을 때
function solution (arr) {
let answer = Array.from({length: arr.length}, () => 1);
// 만약 length가 5이라면, answer = [1, 1, 1, 1, 1]
for (let i = 0; i < arr.length; i++) {
for (let j = 0 j < arr.length; j++) {
if(arr[j]> arr[i]) answer[i]++;
}
}
return answer;
}
다른 방법) 정렬된 배열과 1:1로 비교한다
function solution (arr) {
let answer = [], bin = [...arr], sorted = [];
while (bin.length) {
let max = Math.max(...bin)
// 배열 자체에서 큰 수를 구하려면 ...이용해주면 된다.
// Math.max([...bin])은 안된다.
let index = bin.indexOf(max);
bin.splice(index, 1);
sorted.push(max)
};
for(let i = 0; i < results.length; i++) {
let rank = sorted.indexOf(results[i]) + 1;
// index는 0부터, rank는 1부터 시작하니까
answer.push(rank);
}
return answer;
}
반응형
'2. 우당탕탕 개발자 > 2-1. 공부기록' 카테고리의 다른 글
2021.8.2 TIL 회문문자열,팰린드롬,숫자추출 (0) | 2021.08.02 |
---|---|
2021.7.31 TIL (격차판 최대합, 봉우리) (0) | 2021.07.31 |
2021.7.28 TIL (중복문자 제거, 배열 큰 수 출력) (0) | 2021.07.28 |
2021.7.26 TIL 대문자 -> 소문자 치환, 중간 문자 출력 (0) | 2021.07.26 |
2021.7.25 TIL (문자열 치환, 대문자 개수 파악 알고리즘) (0) | 2021.07.26 |
댓글